我有一个大矩阵(1000 * 11)。我想计算连续行之间的列总和(第一行和第二行,第三行和第四行,依此类推)。例如,
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
我想将上面的矩阵转换成以下内容。
[,1] [,2] [,3] [,4]
[1,] 3 11 19 27
[2,] 7 15 23 31
一种方法是将大矩阵分割成子矩阵并进行计算并合并结果。有没有比这更好的解决方案?
答案 0 :(得分:4)
我们可以使用回收逻辑索引对matrix
的行进行子集化并执行+
mat[c(TRUE, FALSE),] + mat[c(FALSE, TRUE),]
或rowsum
rowsum(mat, group = rep(1:2, each = 2))
如果有更多行,则以编程方式创建“组”
rowsum(mat, group = as.integer(gl(nrow(mat),2, nrow(mat))))
或者也可以使用aggregate
来完成此操作
aggregate(mat, by = list(rep(1:2, each = 2)), FUN = sum)[-1]
mat <- matrix(1:16, 4, 4)