如何在R中通过持续时长计算时间连续分组事件的起止时间
计算分组事件起始时间的方法
你自己想到的解法完全符合需求,逻辑通顺:每个分组内的Endtime是截止到当前行的持续时长累加值,用Endtime减去当前行的dur,刚好得到当前行事件的起始时间,分组内第一个事件计算后刚好得到起始值0,完全满足「每个分组起始时间从0开始」的规则。
完整运行代码如下:
library(dplyr) df <- data.frame( grp = c("A", "B", "A", "C", "C", "A", "B", "A"), dur = c(111,222,33,10,555,333,600,222) ) df %>% group_by(grp) %>% mutate( Endtime = cumsum(dur), Starttime = Endtime - dur )
运行后输出结果:
# A tibble: 8 × 4 # Groups: grp [3] grp dur Endtime Starttime <chr> <dbl> <dbl> <dbl> 1 A 111 111 0 2 B 222 222 0 3 A 33 144 111 4 C 10 10 0 5 C 555 565 10 6 A 333 477 144 7 B 600 822 222 8 A 222 699 477
如果想要更直观的逻辑,也可以用lag()函数取上一行的Endtime作为当前行的起始时间,两种写法等价:
df %>% group_by(grp) %>% mutate( Endtime = cumsum(dur), Starttime = lag(Endtime, default = 0) )
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

