在海量数据中删除重复的A-B / B-A

时间:2019-04-16 14:49:27

标签: r duplicates data.table

我有性能问题,要从data.table(118百万行)中删除A-B和B-A形式的重复项,这是协方差计算的结果。

协方差计算的结果是一个数据表,具有118.000.000行(2.8 GB),格式为:。在某些情况下,行A-B和B-A重复,因为在这些情况下val是相同的。我想删除那些重复项。我找到了一些解决方案(请参见下面的代码),但是执行时间和所需的ram都很高,执行会出错。

示例:

library(data.table)

# create test dataset
size <- 118000000
key1 <- sample( LETTERS, size, replace=TRUE, prob=runif(length(LETTERS), 0.0, 5.0) )
key2 <- sample( LETTERS, size, replace=TRUE, prob=runif(length(LETTERS), 0.0, 5.0) )
val <- runif(size, 0.0, 5.0)

# create data table
dt <- data.table(key1, key2, val, stringsAsFactors=FALSE)

# order data row wise in order to identify duplicates
#system.time(dt_sorted <- t(apply(dt,1,sort)))

# remove duplicates
#system.time(dt_no_duplicates <- dt_sorted [!duplicated(dt_sorted ),])

按行对数据进行排序并消除重复项的解决方案适用于较小的数据集(请参见Select equivalent rows [A-B & B-A]),但是如何处理这么大甚至更大的数据集?

0 个答案:

没有答案