对矩阵的连续行执行数学运算

时间:2018-05-07 05:16:16

标签: r

我有一个大矩阵(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

一种方法是将大矩阵分割成子矩阵并进行计算并合并结果。有没有比这更好的解决方案?

1 个答案:

答案 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)