【问题标题】:Split matrix to a list of matrix by vector按向量将矩阵拆分为矩阵列表
【发布时间】:2016-03-11 14:41:47
【问题描述】:

我正在尝试通过向量中的唯一值将我的矩阵拆分为list。向量将具有与矩阵中每一列一样多的值。 这是一个例子:

 #matrix
 b <- cbind(c(2,2,1,0), c(2,2,1,5), c(2,2,5,6))
 #vector
 a <- c(5,5,4,1)
 #??
 #my outcome should looks like
 v <- list(cbind(c(2,2), c(2,2), c(2,2)), c(1,1,5), c(0,5,6))

所以基本上,我想通过向量中的唯一值将我的矩阵按行拆分为多个矩阵。更具体地说,我的向量从最高值到最低值排序,我需要将它保存在一个列表中!正如您在示例中看到的,v[[1]]unique(a)[1] 的矩阵等等。

【问题讨论】:

  • 不清楚c(2,2)如何成为代表c(2,2,2)行中唯一值的列表——显然唯一值就是2;如果您真的只想要唯一值:apply(b, 1, unique)

标签: r matrix vector


【解决方案1】:
lapply(split(seq_along(a), a), #split indices by a
       function(m, ind) m[ind,], m = b)[order(unique(a))]
#$`5`
#     [,1] [,2] [,3]
#[1,]    2    2    2
#[2,]    2    2    2
#
#$`4`
#[1] 1 1 5
#
#$`1`
#[1] 0 5 6

【讨论】:

  • 这真是太棒了!非常感谢!