каждой группе назначают каждому времени начала последнее время окончания и вид транспорта, который относится к наибольшему идентификатору в R - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть проблема манипулирования данными, для которой я могу решить обе импутации по отдельности, но не обе одновременно.У меня есть набор данных треков, который сгруппирован по ID (разные лица), у каждого трека есть время начала, время окончания, уникальный идентификатор и иногда транспортный режим (но это может отсутствовать).Скажем только, что в процессе сбора данных возникали некоторые ошибки, и теперь многие треки были сохранены несколько раз (т.е. треки с разными идентификаторами командировок, но с одним и тем же идентификатором человека, временем начала и тем же временем окончания или треками с одинаковыми данными).идентификатор человека, время начала и другое время окончания или виды транспорта. Я выяснил, что правильный способ обработки этих данных - это трек с тем же идентификатором человека и точно таким же временем начала, чтобы сохранить последнее время окончания и режим перемещения.принадлежность к самому высокому идентификатору поездки. Так что бывает, что поездка с одним и тем же временем начала имеет разные режимы поездки, и в этом случае я хочу, чтобы режим поездки относился к самому высокому идентификатору поездки (сгруппированный по идентификатору человека и времени начала)Однако, эта поездка не обязательно имеет самое позднее время окончания, и мне нужно сохранить для каждой поездки самое последнее время окончания в этой группе (идентификатор человека и время начала). Если для определенной поездки вообще нет режима путешествия,это также должно остаться пропущенным. Извинения за то, что я cant, опишите это как-нибудь поподробнее, надеюсь, пример объясняет то, что я ищу:

input

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

1 Ответ

0 голосов
/ 21 февраля 2019

Попробуйте следующее:

library(dplyr)

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