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

まず、matrix と 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 に答える