如何在R中合并日期排序数据集的变量连续重复块并生成起止日期
实现方案
你可以借助dplyr(1.1.0及以上版本)内置的consecutive_id函数实现连续相同观测的分组汇总,代码如下:
# 加载依赖包 library(dplyr) result <- df %>% # 过滤掉浓度为NA的无效行 filter(!is.na(concentration)) %>% # 按站点、污染物、标签分组,不同维度的序列分开处理 group_by(station, pollutant, tag) %>% # 生成连续相同浓度的分组ID mutate(grp = consecutive_id(concentration)) %>% # 按分组ID和维度字段汇总 group_by(station, pollutant, tag, concentration, grp) %>% summarise( start_date = min(date), end_date = max(date), .groups = "drop" ) %>% # 移除辅助分组字段 select(-grp)
代码说明
consecutive_id会对连续重复的取值生成相同的整数ID,刚好匹配你需要的「连续相同浓度归为同一组」的需求- 代码中已经按
station、pollutant、tag三个维度预分组,支持这三个字段有多种取值的场景 - 最终输出会自动保留所有维度字段、浓度值、以及对应连续区间的起止日期,和你需要的输出格式完全一致
低版本dplyr兼容方案
如果你使用的dplyr版本低于1.1.0,没有consecutive_id函数,可以将生成grp的代码替换为以下逻辑:
mutate(grp = cumsum(c(TRUE, diff(concentration) != 0)))
内容的提问来源于stack exchange,提问作者Alessandro
相关产品推荐
相关产品推荐

