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

R语言如何将列名列表传入dplyr的distinct函数实现多列去重?

R语言将列名向量传入dplyr::distinct实现多列去重的方法

直接执行distinct(df, columns)报错的核心原因是dplyr采用非标准求值规则,会直接将columns识别为数据框中名为columns的列,而非你提前定义的列名向量对象。可通过以下两种方法解决:

方法1:使用across()+all_of()组合(官方推荐)

这是dplyr 1.0.0版本之后的官方推荐写法,兼容性强、可读性高,适合绝大多数场景:

library(dplyr)
# 直接传入预定义的列名向量即可
df_new <- distinct(df, across(all_of(columns)))

如果需要保留数据框中未参与去重的其他列的数值,添加.keep_all = TRUE参数即可:

df_new_keep_all <- distinct(df, across(all_of(columns)), .keep_all = TRUE)

方法2:使用tidyeval拼接运算符!!!

如果习惯使用元编程写法,可以将列名字符串向量转为符号列表后,用爆炸运算符拼接传入:

library(dplyr)
# 低版本dplyr需要单独加载rlang包,新版本已内置syms函数
df_new <- distinct(df, !!!syms(columns))

两种方法运行后得到的结果与手动输入列名的运行结果完全一致,适合列数较多的场景,不需要手动逐个输入列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:36:04