如何在R语言中删除所有列值完全相同的行
如何在R中删除数据框中所有列完全相同的重复行
要删除数据框里所有列值完全一致的重复行,有两种简单可靠的方法:
方法1:用dplyr的distinct()去重
如果你在用dplyr,直接调用不带列名参数的distinct()即可,它默认会检查所有列的组合,只保留第一次出现的唯一行:
library(dplyr) # 生成去重后的数据集 goal_stats_clean <- goal_stats %>% distinct(.keep_all = TRUE)
这个方法只会移除那些所有列值都一模一样的重复行,像你例子里completions列值不同的行,本来就不是完全重复,会被保留下来,这是正常的。
方法2:用base R的duplicated()
如果习惯用基础R语法,用duplicated()标记重复行,再筛选非重复行即可:
# 筛选出所有非完全重复的行 goal_stats_clean <- goal_stats[!duplicated(goal_stats), ]
duplicated(goal_stats)会生成一个逻辑向量,标记出哪些行是之前出现过的完全重复行,取反后就能得到去重后的结果。
你之前代码的问题说明
你用来去重的goal_stats1 <- goal_stats %>% distinct(.keep_all = TRUE)其实是正确的,它确实只删除所有列完全相同的行。而你提取疑似重复行的代码里,add_count()后再加distinct()是多余的:
add_count(所有列)会给每个完全重复的行组分配大于1的n值,filter(n>1)已经能筛选出所有完全重复的行;- 之后的
distinct()会把这些重复行压缩成唯一行,反而让你误以为存在“部分重复的行”,但实际上那些completions不同的行根本不会被filter(n>1)选中,它们本来就不是完全重复行。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

