【发布时间】:2018-12-12 20:03:08
【问题描述】:
我看到了很多关于如何将连续日期合并到一行的帖子,并尝试了其中的几个(包括this 和使用dplyr 中的lead),但到目前为止还没有找到专门回答的帖子我的问题。
我的数据如下所示:
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
所以我想做的是三方面的:
1) 如果行是连续的,即结束日期 + 1 是下一行的开始日期,我想将它们折叠成一行(如 id A)
2) 如果行不连续,即结束日期 + 1 不是下一行的开始日期,我想将它们分开(如 id B)
3)如果“过期”行没有结束日期,我仍然想将它们折叠成一行(如 id C)
任何帮助将不胜感激!
【问题讨论】:
标签: r data-cleaning