R中的子集矩阵观测

时间:2014-10-28 06:55:06

标签: r

我有一个矩阵x1,如下所示

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 63 64 65 66 67
 0  0 1 1 1 1 1 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 1  1 0 1 0 1 1 0 0 0 0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0
 2  1 0 0 0 0 0 0 0 0 0  0  1  1  1  1  0  0  0  0  0  0  0  0  0  0
77  1 0 0 0 0 0 0 0 0 0  0  1  1  1  1  0  0  0  0  0  0  0  0  0  0
 3  0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  1  1  1  1  1
 4  0 0 0 0 0 0 0 1 0 0  0  0  0  0  0  0  1  1  1  1  0  0  0  0  0
 5  0 0 0 0 0 0 1 1 1 1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 6  0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 7  0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 8  0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 9  0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 10 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 11 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 12 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 13 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 14 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 15 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 16 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 17 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 18 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 19 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 63 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 64 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 65 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 66 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 67 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

有一些不同的组合。

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 63 64 65 66 67
 0  0 1 1 1 1 1 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 1  1 0 1 0 1 1 0 0 0 0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0
 2  1 0 0 0 0 0 0 0 0 0  0  1  1  1  1  0  0  0  0  0  0  0  0  0  0
77  1 0 0 0 0 0 0 0 0 0  0  1  1  1  1  0  0  0  0  0  0  0  0  0  0
 3  0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  1  1  1  1  1
 4  0 0 0 0 0 0 0 1 0 0  0  0  0  0  0  0  1  1  1  1  0  0  0  0  0
 5  0 0 0 0 0 0 1 1 1 1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0

 6  0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 .  . . . . . . . . . .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
 .  . . . . . . . . . .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
 .  . . . . . . . . . .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
 67 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

我正在寻找的是一个程序,它将这个矩阵x1子集,使得每个唯一的组合存储在一个新的矩阵中,例如,x1中的第一行应该存储在一个新的矩阵y1中。

第二个独特的组合(这个组合有两行)

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 63 64 65 66 67
 2  1 0 0 0 0 0 0 0 0 0  0  1  1  1  1  0  0  0  0  0  0  0  0  0  0
77  1 0 0 0 0 0 0 0 0 0  0  1  1  1  1  0  0  0  0  0  0  0  0  0  0

这两行应存储在新的矩阵y2中。第三个独特的组合应该存储在矩阵y3 ......等等......所有这些都应该根据初始矩阵x1自动发生。

任何有关如何执行此操作的建议都会有所帮助。

1 个答案:

答案 0 :(得分:1)

你可以尝试:

  split(as.data.frame(x2),do.call(paste0,as.data.frame(x2))) #this keeps it as data.frame in the list

如果要根据x1中的唯一行拆分矩阵。这将在列表

中存储为matrix
lst <- lapply(split(1:nrow(x1),do.call(paste0, as.data.frame(x1))), function(i) x1[i,]) 
lst[[6]]
#   0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 63 64 65 66 67
#2  1 0 0 0 0 0 0 0 0 0  0  1  1  1  1  0  0  0  0  0  0  0  0  0  0
#77 1 0 0 0 0 0 0 0 0 0  0  1  1  1  1  0  0  0  0  0  0  0  0  0  0