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

使用dplyr的lag/lead匹配多列字符内容实现数据框行筛选

R语言tidyverse实现多文本列相邻行比对筛选方案

实现方法

完全可以使用tidyverse工具链实现该需求,以下提供两种适配不同场景的实现方案:

方案1:分组取尾行(逻辑最简洁,推荐)

你的需求本质是对col1、col2、col3三个列值完全相同的分组,保留每组的最后一行,直接用group_by+slice_tail即可实现,天然支持文本类型列的匹配,不需要额外转换:

library(tidyverse)

df_result <- df %>%
  # 按需要匹配的三个列分组
  group_by(col1, col2, col3) %>%
  # 取每组最后1行
  slice_tail(n = 1) %>%
  # 取消分组,避免后续操作受分组影响
  ungroup()

该方案适配所有连续/非连续的同值分组场景,执行效率高,逻辑清晰不容易出错。

方案2:相邻行逐行比对(严格匹配描述规则)

如果你需要严格遵循「仅比对当前行与下一行,相同则删除当前行」的逻辑(比如存在非连续的同值分组不需要合并的场景),可以用lead函数实现多列同时匹配,文本列直接用==判断即可:

library(tidyverse)

df_result <- df %>%
  filter(
    # 仅保留「和下一行三个列不完全相同」或者「已经是最后一行」的记录
    !(col1 == lead(col1) & col2 == lead(col2) & col3 == lead(col3)) | is.na(lead(col1))
  )

以上两种方案运行后得到的结果均与给出的期望输出完全一致。


内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:30:00