R:用于识别二进制矩阵中的相同行并返回标签向量的函数

时间:2015-02-24 09:15:41

标签: r

我正在寻找一个(快速)函数,它在矩阵中标识只包含整数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之前构建的。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

为了更好的处理,我减少了你的示例垫:

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