假设我有以下矩阵:
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
我怎么能以自动的方式做到这一点,因为在我的情况下,我有一个非常大的矩阵和一个具有不同值的计数向量?
答案 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