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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:37:22