【问题标题】:per group assign to every start time the latest end time and transport mode that belongs to the highest ID in R每个组为每个开始时间分配属于 R 中最高 ID 的最晚结束时间和传输模式
【发布时间】:2019-07-15 17:12:13
【问题描述】:

我有一个数据处理问题,我可以单独解决两个插补,但不能同时解决这两个问题。我有一个按ID(不同的人)分组的轨道数据集,每条轨道都有一个开始时间、结束时间、唯一ID,有时还有一个传输模式(但这可能会丢失)。可以说,在收集数据的过程中发生了一些错误,现在许多曲目已被多次保存(因此,具有不同行程 ID,但相同人员 ID、开始时间和相同结束时间的曲目,或者具有相同人ID,开始时间和不同的结束时间或运输方式。我发现处理这些数据的正确方法是使用相同的人ID和完全相同的开始时间来保存最新的结束时间和旅行模式属于最高行程 ID。因此,确实会发生具有相同开始时间的行程具有不同的旅行模式,在这种情况下,我想保持旅行模式属于最高行程 ID(按人员 ID 和开始时间分组) . 但是,这次旅行不一定有最晚的结束时间,我确实需要在每次旅行中保存该组中的最晚结束时间(人员ID和开始时间)。如果某个旅行根本没有旅行模式,这也需要保持失踪。为我 c 的事实道歉ant 更清楚地描述这个,希望这个例子能解释我在找什么:

输入

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

【问题讨论】:

    标签: r dplyr data-manipulation missing-data imputation


    【解决方案1】:

    试试下面的:

    library(dplyr)
    
    df %>%
      group_by(ID_person, START) %>%
      mutate(
        END = max(END),
        mode = mode[which.max(ID_Track)]
      )
    

    【讨论】:

      猜你喜欢
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多