2

我正在尝试对矩阵执行以下求和:

假设矩阵是:

    mat <- matrix(c(1:5,rep(0,7),c(1:7),rep(0,5),c(1:10), 0,0), 12,3)

我想分别对列号 1、2、3 的行号 5、7、10 的行进行累积求和。(真实数据可以有任意数量的行和列)。

目前,我一直在使用以下代码:

    sum1 <- matrix(rep(0, 36), 12, 3)
    row_index <- c(5,7,10)
    for (k in 1:3) {
      sum1[1:row_index[k], k] <- cumsum(mat[1:row_index[k], k])
    }
    sum1 <- matrix(apply(sum1,1,sum))

首先,我有矩阵和 row_index。我想避免使用循环,因为数据有很多列。我想知道是否有办法做到这一点。

4

2 回答 2

2
depth <- c(5,7,10)
mapply( function(x,y) cumsum(mat[1:x, y]), depth, seq_along(depth) )

[[1]]
[1]  1  3  6 10 15

[[2]]
[1]  1  3  6 10 15 21 28

[[3]]
 [1]  1  3  6 10 15 21 28 36 45 55
于 2015-07-09T00:17:32.167 回答
1

首先,定义一个函数:

sumcolumn <- function(rows, columns, mat){
  cumsum(mat[1:rows, columns])
}

然后在列/行向量上使用 mapply :

mapply(sumcolumn, rows = c(5, 7, 10), columns = c(1, 2, 3), MoreArgs = list(mat = mat))
于 2015-07-09T00:18:46.417 回答