【发布时间】:2019-06-28 15:07:47
【问题描述】:
这个问题与几天前已经发布的一个问题相似,Collapse rows from 0 to 0
这里与前一个问题不同的新变化是,我们如何仅对时间差小于或等于 60 的行按 Id 折叠行。
例如,使用相同的数据集
Incident.ID.. date product
INCFI0000029582 2014-09-25 08:39:45 foo
INCFI0000029582 2014-09-25 08:39:45 foo
INCFI0000029582 2014-09-25 08:39:48 bar
INCFI0000029582 2014-09-25 08:40:44 foo
INCFI0000029582 2014-10-10 23:04:00 foo
INCFI0000029587 2014-09-25 08:33:32 bar
INCFI0000029587 2014-09-25 08:34:41 bar
INCFI0000029587 2014-09-25 08:35:24 bar
INCFI0000029587 2014-10-10 23:04:00 foo
df <- structure(list(Incident.ID.. = c("INCFI0000029582", "INCFI0000029582","INCFI0000029582",
"INCFI0000029582", "INCFI0000029582", "INCFI0000029587", "INCFI0000029587",
"INCFI0000029587", "INCFI0000029587"), date = c("2014-09-25 08:39:45","2014-09-25 08:39:45",
"2014-09-25 08:39:48", "2014-09-25 08:40:44", "2014-10-10 23:04:00",
"2014-09-25 08:33:32", "2014-09-25 08:34:41", "2014-09-25 08:35:24",
"2014-10-10 23:04:00"), product =
c("foo","foo","bar","foo","foo","bar","bar","bar","foo")),
class = "data.frame", row.names = c(NA,
-L))
这通过ID计算时间差
library(dplyr)
library(lubridate)
df1 <- df %>%
group_by(Incident.ID..) %>%
arrange(ymd_hms(date)) %>%
mutate(diff = c(0, diff(ymd_hms(date))))
这会产生如下所示的新列差异
Incident.ID.. date product diff
INCFI0000029582 2014-09-25 08:39:45 foo 0
INCFI0000029582 2014-09-25 08:39:45 foo 0
INCFI0000029582 2014-09-25 08:39:48 bar 3
INCFI0000029582 2014-09-25 08:40:44 foo 56
INCFI0000029582 2014-10-10 23:04:00 foo 1347796
INCFI0000029587 2014-09-25 08:33:32 bar 0
INCFI0000029587 2014-09-25 08:34:41 bar 69
INCFI0000029587 2014-09-25 08:35:24 bar 43
INCFI0000029587 2014-10-10 23:04:00 foo 1348116
现在只在时间差小于或等于 60 的情况下按 Incident.ID.. 折叠行,即 diff <= 60 应该会产生像这样的最终数据集
Incident.ID.. DateMin DateMax product diff_collapse
INCFI0000029582 2014-09-25 08:39:45 2014-09-25 08:40:44 foo,bar,foo 0,0,3,56
INCFI0000029582 2014-09-25 08:40:44 2014-10-10 23:04:00 foo 1347796
INCFI0000029587 2014-09-25 08:33:32 2014-09-25 08:34:41 bar 0
INCFI0000029587 2014-09-25 08:34:41 2014-09-25 08:35:24 bar,bar 69,43
INCFI0000029587 2014-09-25 08:35:24 2014-10-10 23:04:00 foo 1348116
寻求有关如何创建此类折叠数据集的帮助。提前致谢。
【问题讨论】:
-
在您的结果中,我不明白为什么
0包含在第 1 行的diff_collapse中,但排除在下一组中(第 3 行和第 4 行是分开的)。 -
当有一个大于 60 的值(值为 69 和 43)时,为什么第 4 行会折叠?
标签: r dplyr collapse summarize multidplyr