如何在R语言中筛选目标行的前一行(基于dplyr实现分组操作)
需求可行,用dplyr实现方案
核心思路
通过dplyr的窗口函数lead(),检查每一行的下一行是否满足difference >= 2的条件,若满足则保留当前行(即目标行的前一行)。该方法天然支持分组操作,适合大型数据集。
示例数据加载
首先还原示例数据集:
df <- structure(list(ano = c(2013, 2015, 2017, 2017, 2025, 2050, 2060), difference = c(NA, 2, 2, 0, 8, 25, 10)), class = "data.frame", row.names = c(NA, -7L))
实现代码
library(dplyr) result <- df %>% # 标记下一行的difference是否>=2 mutate(keep = lead(difference) >= 2) %>% # 筛选需要保留的行,lead最后一行会返回NA,自动排除 filter(keep) %>% # 移除辅助列 select(-keep) # 查看结果 result
执行后输出结果与你期望的一致:
structure(list(ano = c(2013, 2015, 2017, 2025, 2050), difference = c(NA, 2, 0, 8, 25)), class = "data.frame", row.names = c(NA, 5L))
分组场景适配
如果需要对大型数据集按指定列分组处理,只需在mutate前添加group_by()即可,示例如下(实际替换为你的分组列):
grouped_result <- df %>% group_by(ano) %>% mutate(keep = lead(difference) >= 2) %>% filter(keep) %>% select(-keep) %>% ungroup()
注意事项
lead()默认取当前行的下一行,最后一行无后续行时返回NA,会被filter自动排除,符合需求。- 若原数据中
difference为NA,lead(difference) >=2会返回NA,不会被选中,无需额外处理。
内容的提问来源于stack exchange,提问作者Velton Sousa
相关产品推荐
相关产品推荐

