R使用dplyr按ID和X1分组后比较日期筛选符合条件记录的方法
R dplyr分组筛选组内日期间隔≤1天记录的实现方案
完整实现代码
# 加载dplyr包 library(dplyr) # 数据处理逻辑 df %>% # 按要求的ID、X1字段分组,自动忽略不需要的X2字段 group_by(ID, X1) %>% # 分组内按日期升序排序,避免原数据日期乱序导致间隔计算错误 arrange(dat, .by_group = TRUE) %>% # 筛选满足条件的分组:组内记录数≥2、且组内日期间隔最小值≤1天 filter(n() >= 2, min(abs(diff(dat))) <= 1) %>% # 按需保留输出字段,和预期结果格式对齐 select(ID, X1) %>% # 取消分组 ungroup()
逻辑说明
- 分组环节直接指定
ID和X1两个字段即可,不需要额外处理X2字段,不会影响后续计算 - 优先过滤单记录分组:只有1条记录的分组不存在多记录日期间隔,直接排除可提高计算效率
- 日期间隔计算:先对分组内的日期排序,再用
diff()计算相邻日期的间隔,取绝对值后判断最小值是否≤1天,满足条件就保留该组全部记录
运行输出结果
运行上述代码即可得到预期输出:
ID X1 1 1 A 2 1 A 3 4 B 4 4 B
内容的提问来源于stack exchange,提问作者Joep_S
相关产品推荐
相关产品推荐

