R 基于另一个向量的值添加矩阵的列
假设我有以下矩阵:R 基于另一个向量的值添加矩阵的列,r,matrix,collapse,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 我需要通过根据向量计数的每个值添加列来折叠这个矩阵。这意味着前两列必须相加,第三列保持相等,最后两列求和。我得到
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
我需要通过根据向量计数的每个值添加列来折叠这个矩阵。这意味着前两列必须相加,第三列保持相等,最后两列求和。我得到的矩阵一定是这样的
[,1] [,2] [,3]
[1,] 6 9 30
[2,] 8 10 32
[3,] 10 11 34
[4,] 12 12 36
如果我有一个非常大的矩阵,并且有一个不同值的计数向量,我怎么能自动做到这一点呢?一种方法是通过“计数”向量复制“计数”序列,使用它来
拆分列序列的“mat”,以返回一个列表,使用sapply
循环遍历列表
,使用列索引来子集
每个列表
元素的“mat”,并获取行和
mat2 <- sapply(split(1:ncol(mat), rep(seq_along(counts), counts)),
function(i) rowSums(mat[,i,drop=FALSE]))
dimnames(mat2) <- NULL
mat2
# [,1] [,2] [,3]
#[1,] 6 9 30
#[2,] 8 10 32
#[3,] 10 11 34
#[4,] 12 12 36
mat2另一个理念,在概念上与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
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