每组分配给每个开始时间最晚的结束时间和属于 R 中最高 ID 的传输模式
per group assign to every start time the latest end time and transport mode that belongs to the highest ID in R
我有一个数据操作问题,我可以单独解决这两个插补问题,但不能同时解决这两个问题。我有一个按 ID
(不同的人)分组的轨道数据集,每个轨道都有开始时间、结束时间、唯一 ID,有时还有运输模式(但这可能会丢失)。可以这么说,在收集数据的过程中出现了一些错误,现在很多轨迹已经保存了多次(所以轨迹具有不同的行程 ID,但相同的人 ID、开始时间和相同的结束时间,或者具有相同的轨迹人员 ID、开始时间和不同的结束时间或交通方式。我发现处理此数据的正确方法是针对具有相同人员 ID 和完全相同开始时间的轨道,以保存最新的结束时间和出行方式属于最高旅行ID。所以,确实会发生相同开始时间的旅行有不同的旅行模式,在这种情况下,我想保持旅行模式属于最高旅行ID(按人员ID和开始时间分组) .但是,这次旅行不一定有最晚的结束时间,我确实需要在该组中保存每个旅行的最晚结束时间(人员ID和开始时间)。如果对于某个旅行根本没有旅行模式,这也需要保持缺失。为我 c 的事实道歉蚂蚁描述得更清楚了,希望这个例子能解释我在找什么:
输入
| ID_person | ID_Track | START | END | mode |
|-----------|----------|-------|-----|------|
| 1 | 1 | 8 | 10 | A |
| 1 | 2 | 8 | 10 | NA |
| 1 | 3 | 8 | 10 | B |
| 1 | 4 | 8 | 11 | NA |
| 1 | 5 | 8 | 10 | A |
| 1 | 6 | 8 | 11 | C |
| 1 | 7 | 12 | 13 | NA |
| 1 | 8 | 12 | 13 | A |
| 1 | 9 | 14 | 15 | NA |
| 2 | 10 | 8 | 9 | NA |
| 2 | 11 | 8 | 9 | NA |
| 2 | 12 | 8 | 11 | A |
| 2 | 13 | 8 | 9 | D |
| 2 | 14 | 8 | 10 | B |
| 2 | 15 | 12 | 13 | D |
| 2 | 16 | 15 | 16 | NA |
我想要的
| ID_person | ID_Track | START | END | mode |
|-----------|----------|-------|-----|------|
| 1 | 1 | 8 | 11 | C |
| 1 | 2 | 8 | 11 | C |
| 1 | 3 | 8 | 11 | C |
| 1 | 4 | 8 | 11 | C |
| 1 | 5 | 8 | 11 | C |
| 1 | 6 | 8 | 11 | C |
| 1 | 7 | 12 | 13 | A |
| 1 | 8 | 12 | 13 | A |
| 1 | 9 | 14 | 15 | NA |
| 2 | 10 | 8 | 11 | B |
| 2 | 11 | 8 | 11 | B |
| 2 | 12 | 8 | 11 | B |
| 2 | 13 | 8 | 11 | B |
| 2 | 14 | 8 | 10 | B |
| 2 | 15 | 12 | 13 | D |
| 2 | 16 | 15 | 16 | NA |
获取输入的一些代码
df <- structure(list(ID_person = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), ID_Track = 1:16, START = c(8L,
8L, 8L, 8L, 8L, 8L, 12L, 12L, 14L, 8L, 8L, 8L, 8L, 8L, 12L, 15L
), END = c(10L, 10L, 10L, 11L, 10L, 11L, 13L, 13L, 15L, 9L, 9L,
11L, 9L, 10L, 13L, 16L), mode = c("A", NA, "B", NA, "A", "C",
NA, "A", NA, NA, NA, "A", "D", "B", "D", NA)), .Names = c("ID_person",
"ID_Track", "START", "END", "mode"), row.names = c(NA, -16L), class = "data.frame")
试试下面的方法:
library(dplyr)
df %>%
group_by(ID_person, START) %>%
mutate(
END = max(END),
mode = mode[which.max(ID_Track)]
)
我有一个数据操作问题,我可以单独解决这两个插补问题,但不能同时解决这两个问题。我有一个按 ID
(不同的人)分组的轨道数据集,每个轨道都有开始时间、结束时间、唯一 ID,有时还有运输模式(但这可能会丢失)。可以这么说,在收集数据的过程中出现了一些错误,现在很多轨迹已经保存了多次(所以轨迹具有不同的行程 ID,但相同的人 ID、开始时间和相同的结束时间,或者具有相同的轨迹人员 ID、开始时间和不同的结束时间或交通方式。我发现处理此数据的正确方法是针对具有相同人员 ID 和完全相同开始时间的轨道,以保存最新的结束时间和出行方式属于最高旅行ID。所以,确实会发生相同开始时间的旅行有不同的旅行模式,在这种情况下,我想保持旅行模式属于最高旅行ID(按人员ID和开始时间分组) .但是,这次旅行不一定有最晚的结束时间,我确实需要在该组中保存每个旅行的最晚结束时间(人员ID和开始时间)。如果对于某个旅行根本没有旅行模式,这也需要保持缺失。为我 c 的事实道歉蚂蚁描述得更清楚了,希望这个例子能解释我在找什么:
输入
| ID_person | ID_Track | START | END | mode |
|-----------|----------|-------|-----|------|
| 1 | 1 | 8 | 10 | A |
| 1 | 2 | 8 | 10 | NA |
| 1 | 3 | 8 | 10 | B |
| 1 | 4 | 8 | 11 | NA |
| 1 | 5 | 8 | 10 | A |
| 1 | 6 | 8 | 11 | C |
| 1 | 7 | 12 | 13 | NA |
| 1 | 8 | 12 | 13 | A |
| 1 | 9 | 14 | 15 | NA |
| 2 | 10 | 8 | 9 | NA |
| 2 | 11 | 8 | 9 | NA |
| 2 | 12 | 8 | 11 | A |
| 2 | 13 | 8 | 9 | D |
| 2 | 14 | 8 | 10 | B |
| 2 | 15 | 12 | 13 | D |
| 2 | 16 | 15 | 16 | NA |
我想要的
| ID_person | ID_Track | START | END | mode |
|-----------|----------|-------|-----|------|
| 1 | 1 | 8 | 11 | C |
| 1 | 2 | 8 | 11 | C |
| 1 | 3 | 8 | 11 | C |
| 1 | 4 | 8 | 11 | C |
| 1 | 5 | 8 | 11 | C |
| 1 | 6 | 8 | 11 | C |
| 1 | 7 | 12 | 13 | A |
| 1 | 8 | 12 | 13 | A |
| 1 | 9 | 14 | 15 | NA |
| 2 | 10 | 8 | 11 | B |
| 2 | 11 | 8 | 11 | B |
| 2 | 12 | 8 | 11 | B |
| 2 | 13 | 8 | 11 | B |
| 2 | 14 | 8 | 10 | B |
| 2 | 15 | 12 | 13 | D |
| 2 | 16 | 15 | 16 | NA |
获取输入的一些代码
df <- structure(list(ID_person = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), ID_Track = 1:16, START = c(8L,
8L, 8L, 8L, 8L, 8L, 12L, 12L, 14L, 8L, 8L, 8L, 8L, 8L, 12L, 15L
), END = c(10L, 10L, 10L, 11L, 10L, 11L, 13L, 13L, 15L, 9L, 9L,
11L, 9L, 10L, 13L, 16L), mode = c("A", NA, "B", NA, "A", "C",
NA, "A", NA, NA, NA, "A", "D", "B", "D", NA)), .Names = c("ID_person",
"ID_Track", "START", "END", "mode"), row.names = c(NA, -16L), class = "data.frame")
试试下面的方法:
library(dplyr)
df %>%
group_by(ID_person, START) %>%
mutate(
END = max(END),
mode = mode[which.max(ID_Track)]
)