每个组分配每个开始时间的最新结束时间和运输模式,该模式属于R中的最高ID



我有一个数据操纵问题,我可以单独解决这两个插入,但不能同时解决。我有一个由ID(不同的人)分组的轨道数据集,每个轨道都有一个开始时间,结束时间,独特的ID,有时是传输模式(但这可能会丢失)。可以说,在收集数据的过程中,某些错误发生了,现在许多轨道都被保存了多次(因此具有不同的行程ID的跟踪人ID,开始时间和不同的结束时间或运输模式。我弄清楚该数据的正确方法是具有同一人ID的轨道,并且完全相同的开始时间可以节省最新的结束时间和旅行模式属于最高行程ID。因此,确实会发生相同启动时间的旅行具有不同的旅行模式,在这种情况下,我想保持旅行模式属于最高行程ID(由人ID组成和开始时间)。这也需要保持失踪。对我无法描述这一点的事实很抱歉,希望这个示例解释了我在寻找什么:

输入

| 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)]
  )

最新更新