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

R语言如何按分组提取连续相同value的首行start与末行end日期

R语言连续相同value记录合并实现方法

核心逻辑

通过识别同一ID下连续相同的value块,对每个块取首行start日期、末行end日期完成合并,中间间隔其他value的同值数据会被判定为独立块分开处理。

实现代码

方法1:tidyverse实现(易读性高)

先确保已安装dplyr包,执行如下代码:

library(dplyr)

# 先确保数据按ID、start日期升序排序,若原始数据已排序可跳过此步
my.data <- my.data %>%
  arrange(ID, start)

# 合并处理
my.result <- my.data %>%
  group_by(ID) %>%
  # 生成连续值分组标识:value与上一行不同时分组号+1
  mutate(grp = cumsum(value != lag(value, default = first(value)))) %>%
  group_by(ID, value, grp) %>%
  summarise(
    start = first(start),
    end = last(end),
    .groups = "drop"
  ) %>%
  select(-grp)

方法2:data.table实现(性能更高,适合百万级以上数据)

library(data.table)
setDT(my.data)

# 排序+合并
my.result <- my.data[order(ID, start), .(
  start = first(start),
  end = last(end)
), by = .(ID, value, rleid(ID, value))][, rleid := NULL][]

结果验证

上述两种方法输出的结果与你提供的预期结果完全一致,NA值也会被正确保留。

内容的提问来源于stack exchange,提问作者SarahDew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 02:15:01