r - 在大数据集上查找重复行(使用 dplyr)的高性能方法

标签 r duplicates 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 base duplicated 函数,但它太慢了,因为我的数据很大(超过 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]

关于r - 在大数据集上查找重复行(使用 dplyr)的高性能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47902776/

相关文章:

r:通过将 Excel 文件作为列表传递到 dplyr 来编译它们

r - 漏洞? Stargazer 无法使用 "omit"选项正确显示固定效应/因子标签?

r - 从全局环境访问对象,这些对象直接传递给 ggplot 包装器中的函数

python - 如何仅解析 Python 列表中的重复项?

ios - 如何避免iOS项目重复符号链接(symbolic link)错误?

php - 通过删除重复项来限制结果,但保留最高的重复项?

R - 配对数据中的样本

dplyr mutate 中的递归错误

r - 通过 R 和神经网络 (neuralnet) 使用之前的价格预测价格

r - 检查一个时间间隔内的任何日期是否在另一个时间间隔内的任何日期内