簡體   English   中英

R:用於識別二進制矩陣中相同的行並返回標簽向量的函數

[英]R: Function to identify identical rows in a binary matrix and return a label vector

我正在尋找一個(快速)函數,該函數標識僅包含整數0和1的矩陣中的相同行,該函數返回一個標簽向量,告訴我哪些行相同。

這是我想要實現的可復制示例:

mat = rbinom(n=1000, size=1, prob=0.8)
dim(mat) = c(200, 5)

umat = unique(mat)
idVec = numeric(nrow(mat))
for(i in seq_len(nrow(umat))){
  for(j in seq_len(nrow(mat))){
    if(isTRUE(all.equal(mat[j,], umat[i,]))){
      idVec[j] = i
    }    
  }
}
cbind(idVec, mat)
table(idVec)

實際上,此功能http://www.stat.washington.edu/~rje42/lca/html/group.html十分完美。 但是,它不在CRAN上,也沒有源代碼,而是在R 3.0.0之前構建的。

謝謝你的幫助!

為了更好地處理,我對示例墊進行了一些簡化:

mat = rbinom(n=100, size=1, prob=0.8)
dim(mat) = c(20, 5)

現在,您可以像這樣創建idVec (假設您不關心實際數字,只關心正確的“映射”):

idVec <- as.integer(factor(apply(mat, 1, toString)))

當然,您可以添加它或創建表:

> cbind(idVec, mat)
      idVec          
 [1,]     6 1 1 1 1 1
 [2,]     5 1 1 1 1 0
 [3,]     6 1 1 1 1 1
 [4,]     5 1 1 1 1 0
 [5,]     1 0 1 1 0 1
 [6,]     2 0 1 1 1 1
 [7,]     6 1 1 1 1 1
 [8,]     6 1 1 1 1 1
 [9,]     6 1 1 1 1 1
[10,]     5 1 1 1 1 0
[11,]     4 1 0 1 1 1
[12,]     5 1 1 1 1 0
[13,]     6 1 1 1 1 1
[14,]     4 1 0 1 1 1
[15,]     3 1 0 1 0 0
[16,]     1 0 1 1 0 1
[17,]     6 1 1 1 1 1
[18,]     6 1 1 1 1 1
[19,]     6 1 1 1 1 1
[20,]     2 0 1 1 1 1
> table(idVec)
idVec
1 2 3 4 5 6 
2 2 1 2 4 9 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM