我有性能问题,要从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]),但是如何处理这么大甚至更大的数据集?