查找重复行(使用dplyr)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找重复行(使用dplyr)相关的知识,希望对你有一定的参考价值。

我有以下数据框:

> df1 <- data.frame("valA" = c(1,1,1,1,2,1,3,3,3), "valB" = c(1,2,3,1,2,3,1,2,3), "Score" = c(100,90,80,100, 60,80,10,20,30))
> df1
  valA valB Score
1    1    1   100
2    1    2    90
3    1    3    80
4    1    1   100
5    2    2    60
6    1    3    80
7    3    1    10
8    3    2    20
9    3    3    30

我想要重复的值(预期的结果是):

     valA  valB Score
 1     1     1   100
 2     1     3    80
 3     1     1   100
 4     1     3    80

我知道有代码可以在dplyr :: distinct中获取唯一值,但我需要知道哪些行是重复的,而不是从数据框中删除重复。我试过R基础包:重复功能,但由于我的数据很大(超过2000万行),所以它太慢了。我也尝试过:

duplicated_df1 <- df1 %>% group_by(valA, valB, Score) %>% filter(n() > 1)

这可能导致上面的预期结果,但同样,它太慢了,我没有足够的RAM。任何人都可以建议我找到重复行的有效和快速的方法?

答案

对于大数据,尝试data.table方法通常很有用。在这种情况下,您可以使用以下命

library(data.table)
setDT(df1, key = c("valA", "valB", "Score"))
df1[, N := .N, by = key(df1)]                # count rows per group
df1[N > 1]

以上是关于查找重复行(使用dplyr)的主要内容,如果未能解决你的问题,请参考以下文章

使用 dplyr 在 data.frame 中查找逐行最小正非零数

R语言dplyr包distinct函数去除重复数据行实战

使用 dplyr、group_by 和折叠或汇总连接字符串/行,但保持 NA 值 [重复]

R删除冗余行数据基于dplyr包

如何根据另一个变量的值使用 dplyr::Distinct

在 dplyr 中使用 group_by 时在 R 中格式化数字 [重复]