在下面的数据框中,我有可以重复的事件序列,直到生成新事件。我想使用的功能,可以帮助我选择这些类似的行后,计算之间的差异timestamp_end
的的最后出现的事件和timestamp_start
的的第一个事件。
数据框:
DF1 <- data.frame(segment_id = c(1, 1, 1, 1, 2 , 3, 4), first_event= c("a", "a", "a","a", "a", "b","c" ), second_event = c("a", "a","a","a", "b", "c", "c"), timestamp_start = c("2019-06-06 11:47:00","2019-06-06 12:59:38", "2019-06-06 13:01:03", "2019-06-06 14:47:03 ", "2019-06-06 18:47:00", "2019-06-06 22:47:00", "2019-06-07 02:47:00") , timestamp_end = c("2019-06-06 12:59:38", "2019-06-06 13:01:03", "2019-06-06 14:47:03", "2019-06-06 18:47:00", "2019-06-06 22:47:00 ", "2019-06-07 02:47:00", "2019-06-07 06:47:00"))
segment_id first_event second_event timestamp_start timestamp_end
1 a a 2019-06-06 11:47:00 2019-06-06 12:59:38
1 a a 2019-06-06 12:59:38 2019-06-06 13:01:03
1 a a 2019-06-06 13:01:03 2019-06-06 14:47:03
1 a a 2019-06-06 14:47:03 2019-06-06 18:47:00
2 a b 2019-06-06 18:47:00 2019-06-06 22:47:00
3 b c 2019-06-06 22:47:00 2019-06-07 02:47:00
4 c c 2019-06-07 02:47:00 2019-06-07 06:47:00
所以,我已经尝试了dplyr
包group_by()
和mutate()
功能。但是,我不确定哪个功能可以帮助我获得持续时间。
DF2 <- DF1 %>%
group_by(segment_id)%>%
mutate("duration" = difftime(????) , units = 'hours')
我正在寻找的最终结果DF2
应该是这样的:
>DF2
segment_id first_event second_event timestamp_start timestamp_end duration
1 a a 2019-06-06 11:47:00 2019-06-06 18:47:00 7
2 a b 2019-06-06 18:47:00 2019-06-06 22:47:00 4
3 b c 2019-06-06 22:47:00 2019-06-07 02:47:00 4
4 c c 2019-06-07 02:47:00 2019-06-07 06:47:00 4
我很感激你在这方面的帮助。
我们可以更改列timestamp_start
,并timestamp_end
以POSIXct
键入,group_by
segment_id
,first_event
和second_event
,获得first
timestamp_start
和last
timestamp_end
并计算它们之间的时间之差。
library(dplyr)
DF1 %>%
mutate_at(vars(starts_with('timestamp')), as.POSIXct) %>%
group_by(segment_id, first_event, second_event) %>%
summarise(timestamp_start = first(timestamp_start),
timestamp_end = last(timestamp_end),
duration = as.numeric(difftime(timestamp_end,
timestamp_start, units = "hours")))
# segment_id first_event second_event timestamp_start timestamp_end duration
# <dbl> <fct> <fct> <dttm> <dttm> <dbl>
#1 1 a a 2019-06-06 11:47:00 2019-06-06 18:47:00 7
#2 2 a b 2019-06-06 18:47:00 2019-06-06 22:47:00 4
#3 3 b c 2019-06-06 22:47:00 2019-06-07 02:47:00 4
#4 4 c c 2019-06-07 02:47:00 2019-06-07 06:47:00 4
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句