我有一个非常大的data.table(500 x 2000),我需要找出是否有任何列是重复的,即所有行都有相同的值.有没有办法在data.table结构中有效地执行此操作?
我已经all(col1 == col2)
为每对列尝试了一种天真的双循环方法,但这需要太长时间.我也尝试将其转换为data.frame并使用上述方法,但仍需要相当长的时间.
我目前的解决方案是将data.table转换为矩阵并使用以下apply()
函数:
similarity.matrix <- apply(m, 2, function(x) colSums(x == m)))/nrow(m)
然而,这种方法迫使所有元素的模式相同,而我宁愿不会发生这种情况.我还有其他选择吗?
以下是data.table的示例构造:
m = matrix(sample(1:10, size=1000000, replace=TRUE), nrow=500, ncol=2000) DF = as.data.frame(m) DT = as.data.table(m)
rosscova.. 6
根据@ Haboryme*的建议,您可以使用duplicated
以查找任何重复的向量.duplicated
通常以行方式工作,但您可以将其转置为t()
仅用于查找重复项.
DF <- DF[ , which( !duplicated( t( DF ) ) ) ]
使用a data.table
,您可能需要添加with = FALSE
(我认为这取决于data.table
您使用的版本).
DT <- DT[ , which( !duplicated( t( DT ) ) ), with = FALSE ]
*@ Haboryme,如果你要将你的评论变成答案,请做,我将删除这个.
根据@ Haboryme*的建议,您可以使用duplicated
以查找任何重复的向量.duplicated
通常以行方式工作,但您可以将其转置为t()
仅用于查找重复项.
DF <- DF[ , which( !duplicated( t( DF ) ) ) ]
使用a data.table
,您可能需要添加with = FALSE
(我认为这取决于data.table
您使用的版本).
DT <- DT[ , which( !duplicated( t( DT ) ) ), with = FALSE ]
*@ Haboryme,如果你要将你的评论变成答案,请做,我将删除这个.