【问题标题】:fast identify duplicated rows (with same entries) in matrix in R快速识别R中矩阵中的重复行(具有相同条目)
【发布时间】:2017-02-15 15:55:49
【问题描述】:

我有一个这样的矩阵:

M <- rbind(c("CD4", "CD8"),
           c("CD8", "CD4"),
           c("DN", "CD8"),
           c("CD8", "DN"),
           c("CD4", "DN"),
           c("DN", "CD4"))

第 1 和第 2 是重复的,第 3 和第 4 是重复的,第 5 和第 6 是重复的,因为它们包含相同的元素(不管它是什么顺序)。

我知道下面的代码可以做到。

Msort <- t(apply(M, 1, sort))
duplicated(Msort)

我想得到这个逻辑向量:

> duplicated(Msort)
[1] FALSE  TRUE FALSE  TRUE FALSE  TRUE

但是如果矩阵很大,比如10000行10000列,如何有效地处理这种情况呢?

谢谢。

【问题讨论】:

  • Data.Table 是你的朋友!我认为它的概述很好here
  • 你能测试一下is.mutual(graph(t(M)))
  • @d.b 这不起作用。
  • @d.b 我已经安装了 igraph。这是结果。 &gt; is.mutual(graph(t(M))) [1] TRUE TRUE TRUE TRUE TRUE TRUE
  • @BioChemoinformatics,我不确定我是否在帮助你,但get.edgelist( as.undirected( graph(t(M)))) 似乎给了你独特的行。

标签: r


【解决方案1】:

我尝试过使用矩阵。请尝试一次:

M[duplicated(M[c("V1", "V2")]),]
#     [,1]  [,2] 
#[1,] "CD8" "CD4"
#[2,] "CD8" "DN" 
#[3,] "DN"  "CD4"

【讨论】:

  • data.frame 并不是最好的方法,因为我们讨论的是 10,000x10,000 矩阵。正如 ike 所建议的,data.table 是要走的路
  • @Zico 你能多谈谈你的方法吗?另外,我想知道哪一个是重复的,而不仅仅是具有唯一的行。谢谢。
  • 您确实意识到我们在这里一次处理多个列,因此您的示例不适用。我同意您可以使用带有管道的 data.frame 来获得快速结果,但是您的示例已经过时了。见here
  • 你可以试试这个:a
猜你喜欢
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
相关资源
最近更新 更多