根据另一个向量的值添加矩阵的列

时间:2015-11-17 18:56:34

标签: r matrix collapse

假设我有以下矩阵:

 mat <- matrix(1:20, ncol=5)
      [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

和以下载体

counts=c(2,1,2)

我需要根据该矢量计数的每个值添加列来折叠此矩阵。这意味着前两列最多,第三列保持相等,最后两列相加。我得到的矩阵必须像这样

      [,1] [,2] [,3] 
[1,]    6    9   30
[2,]    8   10   32
[3,]    10  11   34
[4,]    12  12   36

我怎么能以自动的方式做到这一点,因为在我的情况下,我有一个非常大的矩阵和一个具有不同值的计数向量?

2 个答案:

答案 0 :(得分:3)

一种方法是通过'计数'向量复制'计数'序列,用split'mat'的列序列返回list,循环通过{{ 1}}使用list,使用列索引sapply为每个subset元素添加'mat'并获取list

rowSums

答案 1 :(得分:2)

另一个想法,概念上类似于akrun:

t(rowsum(t(mat), rep(seq_along(counts), counts)))
#      1  2  3
#[1,]  6  9 30
#[2,]  8 10 32
#[3,] 10 11 34
#[4,] 12 12 36