2017-02-15 65 views
0

我有這樣一個矩陣:快速識別重複的行(有相同的條目)在矩陣中的R

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

的第一和第二是重複的,和第3和第4的重複,和第5和第6被複制因爲他們包括相同的元素(不管它是什麼順序)。

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

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

我想這個邏輯向量:

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

但如果矩陣很大,說10,000行和10000列,如何應對這種局面efficicently?

感謝。

+1

Data.Table是你的朋友!我認爲這很好地描述[這裏](http://stackoverflow.com/questions/19392332/find-all-duplicated-records-in-data-table-not-all-but-one)。 – ike

+0

你可以測試'is.mutual(graph(t(M)))' –

+0

@ d.b這是行不通的。 – BioChemoinformatics

回答

0

我試過用矩陣做。請嘗試一次:

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

data.frame並不是這裏最好的方法,因爲我們正在談論10,000x10,000的矩陣。正如ike所建議的,data.table是要走的路 – Akbar

+0

看看plz:http://stackoverflow.com/questions/15690688/r-checking-for-duplicates-is-painfully-slow-even-with-mclapply – Zico

+0

@Zico你可以多說一下你的方法嗎?另外,我想知道哪一個是重複的,而不僅僅是具有唯一的行。謝謝。 – BioChemoinformatics