如何在R语言中合并连续时间区间,解决仅合并相邻两行的问题
R语言连续时间区间合并问题解决方案
你原有代码的问题出在连续判断的逻辑方向和分组累加规则错误:用lead()匹配下一行的逻辑会导致累加标记仅能识别相邻两行的连续性,无法把多段连续的区间归到同一分组。
以下是可直接实现需求的代码:
library(dplyr) df_result <- df %>% # 按分组维度、时间排序,保证区间顺序正确 group_by(id, degree) %>% arrange(start_date, .by_group = TRUE) %>% # 生成连续分组标记:当前行start不等于上一行stop时新开分组 mutate(grp = cumsum(start_date != lag(stop_date, default = first(start_date) + 1))) %>% # 按分组汇总,取每组最早开始和最晚结束时间 summarise( start_date = min(start_date), stop_date = max(stop_date), .groups = "drop" )
运行后输出结果完全符合你的预期:
> df_result # A tibble: 2 × 4 id degree start_date stop_date <dbl> <dbl> <date> <date> 1 1 2 2016-02-22 2016-02-22 2 1 2 2016-03-07 2016-07-25
如果需要调整连续判定的间隔阈值(比如允许区间间隔1天仍算连续),只需修改mutate中的判断条件,把日期差值调整为对应阈值即可。
内容的提问来源于stack exchange,提问作者rachel3765
相关产品推荐
相关产品推荐

