对于按ID进行的每个数据分组,我想获取数据框中事件之间的时间间隔。我要使用的日期在其自己的列中。我已经使用dplyr完成了以下操作:
这是数据的外观。我希望输出为time_diff列。任何帮助将不胜感激!
ID: Status: Start-time: End-time: time-diff:
1 Active 01/01/2018 NA 0
1 Complete NA 01/02/2018 1
2 Active 03/02/2018 0
2 Active NA 0
2 Complete NA 03/06/2018 4
答案 0 :(得分:0)
获取时间和NA
值之间的时差将仅返回NA
。一种更有意义的方法是,使每个事件的时间各不相同,然后对每个组进行总结(id
)。
d <- tibble(id = c(1,1,2,2),
st = ymd(c("2019-05-03", "2019-02-06", "2019-07-11","2019-05-13")),
et = ymd(c("2019-05-10", "2019-02-16", "2019-07-04","2019-05-09")))
d2 <- d %>%
mutate(td = et-st, # calculate the time difference (td)
atd = abs(td)) %>% # calculate the absolute td (atd)
d2
# A tibble: 4 x 5
id st et td atd
<dbl> <date> <date> <time> <time>
1 1 2019-05-03 2019-05-10 7 days 7 days
2 1 2019-02-06 2019-02-16 10 days 10 days
3 2 2019-07-11 2019-07-04 -7 days 7 days
4 2 2019-05-13 2019-05-09 -4 days 4 days
然后您可以以绝对差的平均值为例,并获得:
d2 %>%
group_by(id) %>% # for each group (id)
summarise(mtd = mean(atd)) # calculate the mean time difference (mtd)
# A tibble: 2 x 2
id mtd
<dbl> <time>
1 1 8.5 days
2 2 5.5 days