You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:00:00