【发布时间】:2020-06-28 21:48:21
【问题描述】:
我有一个关于将矩阵的列相加的问题 例如:
I have a matrix
[,1] [,2] [,3]
[1,] 1 3 1
[2,] 2 4 2
I want it to be
[,1] [,2] [,3]
[1,] 1 4 5
[2,] 2 6 8
【问题讨论】:
标签: r
我有一个关于将矩阵的列相加的问题 例如:
I have a matrix
[,1] [,2] [,3]
[1,] 1 3 1
[2,] 2 4 2
I want it to be
[,1] [,2] [,3]
[1,] 1 4 5
[2,] 2 6 8
【问题讨论】:
标签: r
我们可以通过循环遍历指定为 1 的 apply 和 MARGIN 的行并转置输出来对每一行应用 cumsum
t(apply(m1, 1, cumsum))
# [,1] [,2] [,3]
#[1,] 1 4 5
#[2,] 2 6 8
或者使用for 循环
for(i in seq_len(ncol(m1))[-1]) m1[,i] <- m1[, i] + m1[, i-1]
或者另一种选择是将其拆分为list 向量与asplit,然后将Reduce 与+ 和accumulate = TRUE 分开
do.call(cbind, Reduce(`+`, asplit(m1, 2), accumulate = TRUE))
# [,1] [,2] [,3]
#[1,] 1 4 5
#[2,] 2 6 8
或使用方便的函数rowCumsums 来自matrixStats
library(matrixStats)
rowCumsums(m1)
# [,1] [,2] [,3]
#[1,] 1 4 5
#[2,] 2 6 8
m1 <- cbind(1:2, 3:4, 1:2)
【讨论】: