R: Объединить дубликаты записей и условно выбрать даты по группам - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть набор данных, содержащий сотни фирм, в которых сотрудники сгруппированы по фирмам id.Для некоторых фирм существует несколько записей для одной и той же employee, хотя и с разными датами start и stop.

Я хочу объединить или удалить дубликаты записей о сотрудниках, сохраняя при этом оба ранних издве даты начала и позже двух дат окончания.Мой набор данных выглядит следующим образом:

df <- structure(list(id = c(1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
  employee = c("culver", "maguire", "florenzano","cretu", "tran", "ryman",
  "menezes", "dancause", "schumaker", "tyler", "cretu", "tran", "menezes"),
  started = structure(c(15014, 15014, 15014, 15279, 15279, 15279, 15279, 15279, 15279, 15279, 15706, 15492, 15706), class = "Date"),
  ended = structure(c(18157, 15126, 15126, 15949, 15949, 15461, 15705, 15461, 15461, 15584, 18157,
  15706, 15876), class = "Date")), row.names = c(NA, -13L), class = c("tbl_df","tbl", "data.frame"), .Names = c("id", "employee", "started","ended"))

Вы видите, что в Фирме 2 есть повторяющиеся записи для Cretu, Tran и Menezes.Окончательный набор данных должен выглядеть следующим образом:

df2 <- structure(list(id = c(1, 1, 1, 2, 2, 2, 2, 2, 2, 2),
  employee = c("culver", "maguire", "florenzano","cretu", "tran", "ryman",
  "menezes", "dancause", "schumaker", "tyler"),
  started = structure(c(15014, 15014, 15014, 15279, 15279, 15279, 15279, 15279, 15279, 15279), class = "Date"),
  ended = structure(c(18157, 15126, 15126, 18157, 15949, 15461, 15876, 15461, 15461, 15584), class = "Date")), row.names = c(NA, -13L), class = c("tbl_df","tbl", "data.frame"), .Names = c("id", "employee", "started","ended"))

Я пробовал несколько решений, включающих mutate, which.min и which.max, но безуспешно.Здесь должно быть доступно аккуратное решение, но я не могу понять это.Любая помощь будет высоко ценится.

Ответы [ 2 ]

1 голос
/ 25 сентября 2019
library(dplyr)
df %>% group_by(id, employee) %>% 
  summarise(started = min(started), ended = max(ended)) %>% 
  ungroup()
0 голосов
/ 25 сентября 2019

Это сделал это.Исходный код @ slava-kohut с предложением @ IceCreamToucan вернул правильные результаты.Спасибо вам обоим за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...