[英]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.