使用R语言duplicated()函数查找重复记录的问题
解决R语言中获取数据框全部重复记录的问题
嘿,我懂你为啥疑惑啦!duplicated()函数的默认行为确实有点“藏一手”——它只会标记每组重复记录里除了第一次出现之外的后续行,所以你才只看到了部分重复项。要把所有属于重复组的行都揪出来,咱们可以用下面两种方法:
方法一:结合正向和反向重复标记
我们可以同时用duplicated()的默认模式和fromLast=TRUE模式,把两个结果用逻辑或(|)连接,这样就能覆盖所有重复组里的行:
# 获取所有重复行的索引 dup_indices <- duplicated(exdata) | duplicated(exdata, fromLast = TRUE) # 筛选出所有重复记录 exdata[dup_indices, ]
运行这个代码后,你会得到所有重复的行:
a b 1 1 1 2 1 1 7 3 3 9 3 3 10 4 9 11 4 9 12 4 9
原理很简单:duplicated(exdata)标记“不是第一次出现”的重复行,duplicated(exdata, fromLast = TRUE)标记“不是最后一次出现”的重复行,两者取或之后,所有属于重复组的行都会被选中。
方法二:用dplyr包的分组筛选(tidyverse风格)
如果你习惯用tidyverse工具链,也可以用dplyr的分组筛选功能,直接找出每组(按a和b分组)中行数大于1的记录:
library(dplyr) exdata %>% group_by(a, b) %>% filter(n() > 1) %>% ungroup()
这个方法更直观,分组后只要该组的记录数超过1,就说明是重复组,直接把整个组的行都保留下来。
内容的提问来源于stack exchange,提问作者Lovetoken
相关产品推荐
相关产品推荐

