Я видел много потоков о том, как объединить последовательные даты в одну строку, и перепробовал несколько из них (включая this и использование lead
из dplyr
), но до сих пор не нашелпоток, который конкретно отвечает на мой вопрос.
Вот как выглядят мои данные:
df <- data.frame(
id = c("A", "A", "A", "B", "B", "C", "C", "C"),
start = as.Date(c("2013-05-21", "2014-03-17", "2014-12-12", "2009-03-08",
"2011-07-30", "2008-10-07", "2009-11-21", "2010-12-01")),
end = as.Date(c("2014-03-16", "2014-12-11", NA, "2011-07-14",
NA, "2009-11-20", NA, NA)),
status = c("expired", "expired", "active", "expired",
"active", "expired", "expired", "active")
)
И ниже мой желаемый вывод:
id start end status
A 2013-05-21 NA active
B 2009-03-08 2011-07-14 expired
B 2011-07-30 NA active
C 2008-10-07 NA active
Итак, что я хочуdo состоит из трех частей:
1) Если строки являются последовательными, то есть дата окончания + 1 - это дата начала следующей строки, я бы хотел свернуть их в одну строку (как в идентификаторе A)
2) Если строки не являются последовательными, то есть конечная дата + 1 НЕ является начальной датой следующей строки, я бы хотел оставить их отдельно (как в идентификаторе B)
3) Если«истекшие» строки не имеют конечной даты, я все же хотел бы свернуть их в одну строку (как в id C)
Любая помощь будет принята с благодарностью!