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

dplyr中等价于df[duplicated(df[,subset]),]的实现方法

寻找与基础R去重语句等价的dplyr写法

需求:找到和基础R代码 df[duplicated(df[,subset]),] 等价的dplyr写法,该代码的作用是基于指定的subset列识别重复组,保留每组中除首个匹配行之外的所有重复行。


先说明:显示所有重复行的代码(包含首行)

你提到的这段代码会筛选出所有属于重复组的行(包括每组的第一行),但并非我们要的目标结果:

df %>% filter(n() > 1, .by = col)

正确的等价写法

方法1:使用.by参数(dplyr 1.1.0及以上版本推荐)

无需显式分组,语法更简洁,且保留原数据行顺序:

df %>% filter(row_number() > 1, .by = subset)

方法2:显式分组写法(兼容旧版dplyr)

通过group_by指定分组列,筛选时保留每组第2行及以后的记录,最后取消分组状态避免影响后续操作:

df %>% group_by(subset) %>% filter(row_number() > 1) %>% ungroup()

你提到的SQL风格写法优化

你想到的贴近SQL风格的写法是可行的,只需将col替换为实际的subset列,建议加上ungroup()清理分组:

# 替换subset为实际列名;若要基于所有列,旧版dplyr可用group_by_all(),新版推荐group_by(across(everything()))
df %>% group_by(subset) %>% filter(row_number() > 1) %>% ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:03:16