Sum Every N Values in Matrix

前端 未结 3 1411
余生分开走
余生分开走 2021-01-26 23:55

So I have taken a look at this question posted before which was used for summing every 2 values in each row in a matrix. Here is the link: sum specific columns among rows. I als

相关标签:
3条回答
  • 2021-01-27 00:19

    To sum consecutive sets of n elements from each row, you just need to write a function that does the summing and apply it to each row:

    n <- 3
    t(apply(y, 1, function(x) tapply(x, ceiling(seq_along(x)/n), sum)))
    #       1  2  3
    # [1,] 12 39 66
    # [2,] 15 42 69
    # [3,] 18 45 72
    
    0 讨论(0)
  • 2021-01-27 00:38

    Transform the matrix to an array and use colSums (as suggested by @nongkrong):

    y <- matrix(1:27, nrow = 3)
    n <- 3
    
    a <- y
    dim(a) <- c(nrow(a), ncol(a)/n, n)
    b <- aperm(a, c(2,1,3))
    colSums(b)
    #     [,1] [,2] [,3]
    #[1,]   12   39   66
    #[2,]   15   42   69
    #[3,]   18   45   72
    

    Of course this assumes that ncol(y) is divisible by n.

    PS: You can of course avoid creating so many intermediate objects. They are there for didactic purposes.

    0 讨论(0)
  • 2021-01-27 00:40

    I would do something similar to the OP -- apply rowSums on subsets of the matrix:

    n  = 3
    ng = ncol(y)/n
    sapply( 1:ng, function(jg) rowSums(y[, (jg-1)*n + 1:n ]))
    
    #      [,1] [,2] [,3]
    # [1,]   12   39   66
    # [2,]   15   42   69
    # [3,]   18   45   72
    
    0 讨论(0)
提交回复
热议问题