R语言dplyr包distinct按非指定列去重时保留目标列的方法
问题原因
dplyr包的distinct()函数默认仅返回传入函数用于判定重复的列,你原代码中仅传入了排除column5的其余列作为去重依据,因此返回结果会自动丢弃column5。
正确代码写法
方法1:保留所有列(默认保留重复组首行)
添加.keep_all = TRUE参数即可,该参数会让函数在按指定列判定重复的同时,保留数据框的全部列,重复组默认保留第一行的所有字段值:
library(dplyr) dfNew <- df %>% distinct(across(-column5), .keep_all = TRUE)
也可以省略across(),直接写排除列的规则,效果完全一致:
dfNew <- df %>% distinct(-column5, .keep_all = TRUE)
方法2:自定义重复组的保留规则
如果你需要指定重复组中保留的行规则(比如保留column5取值最大/最小的行),可以用分组筛选的方式实现:
# 示例:除column5外字段一致的重复组中,保留column5值最大的行 dfNew <- df %>% group_by(across(-column5)) %>% slice_max(order_by = column5, n = 1) %>% ungroup()
注意:如果你的
column5是非标准列名(比如带空格、特殊字符),需要用反引号包裹列名,例如`用户编号`。
内容的提问来源于stack exchange,提问作者Miquel
相关产品推荐
相关产品推荐

