对于这样的数据集
Incident.ID.. date product
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", "INCFI0000029587", "INCFI0000029587",
"INCFI0000029587", "INCFI0000029587"), date = c("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","bar","foo","foo","bar","bar","bar","foo")),
class = "data.frame", row.names = c(NA,
-8L))
我使用mutate函数按id计算滚动时间差,如下所示
library(dplyr)
library(lubridate)
df1 <- df %>%
group_by(Incident.ID..) %>%
mutate(diff = c(0, diff(ymd_hms(date))))
这将创建列diff
,如下所示
Incident.ID.. date product diff
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
现在,我的目标是聚合/折叠从零到零的行,预期的最终数据集如下
Incident.ID.. DateMin DateMax product
INCFI0000029582 2014-09-25 08:39:45 2014-10-10 23:04:00 foo,bar,foo,foo
INCFI0000029587 2014-09-25 08:33:32 2014-10-10 23:04:00 bar,bar,bar,foo
我不知道如何折叠行,如上面所示的最小和最大日期列,我需要帮助。提前感谢。
1条答案
按热度按时间ev7lccsx1#
group_by
属性保留在mutate
之后,因此我们通过组summarise
来获取“date”的min
、max
,并通过将元素paste
合并在一起来折叠“product”(toString
是paste(., collapse=", ")
的一个方便的 Package 器)