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
相关产品推荐
相关产品推荐

