当前位置:  开发笔记 > 编程语言 > 正文

在data.table中查找重复的列

如何解决《在data.table中查找重复的列》经验,为你挑选了1个好方法。

我有一个非常大的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,如果你要将你的评论变成答案,请做,我将删除这个.



1> rosscova..:

根据@ 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,如果你要将你的评论变成答案,请做,我将删除这个.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有