R: How to sum pairs in a Matrix by row?

前端 未结 5 723
臣服心动
臣服心动 2021-01-23 02:54

Probably this would be easy. I have a Matrix:

testM <- matrix(1:40, ncol = 4, byrow = FALSE)
testM
      [,1] [,2] [,3] [,4]
 [1,]    1   11   21   31
 [2,]           


        
相关标签:
5条回答
  • 2021-01-23 03:17

    Here's a solution using rowSums()

    sapply( list(1:2,3:4) , function(i) rowSums(testM[,i]) )
    

    if the number of columns should be arbitrary, it gets more complicated:

    li <- split( 1:ncol(testM) , rep(1:(ncol(testM)/2), times=1 , each=2))
    
    sapply( li , function(i) rowSums(testM[,i]) )
    
    0 讨论(0)
  • 2021-01-23 03:18

    a solution around your initial idea:

    sapply(seq(2, ncol(testM), 2), function(x) apply(testM[, (x-1):x], 1, sum))
    
    0 讨论(0)
  • 2021-01-23 03:22

    How about:

    matrix(c(testM[, 1] + testM[, 2], testM[, 2] + testM[, 4]), nrow = 10)
    
    0 讨论(0)
  • 2021-01-23 03:24
    testM[,c(T,F)]+testM[,c(F,T)];
    ##       [,1] [,2]
    ##  [1,]   12   52
    ##  [2,]   14   54
    ##  [3,]   16   56
    ##  [4,]   18   58
    ##  [5,]   20   60
    ##  [6,]   22   62
    ##  [7,]   24   64
    ##  [8,]   26   66
    ##  [9,]   28   68
    ## [10,]   30   70
    
    0 讨论(0)
  • 2021-01-23 03:38

    We can do a matrix multiplication:

    M <- matrix(c(1,1,0,0, 0,0,1,1), 4, 2)
    testM %*% M
    

    another solution with tapply():

    g <- gl(ncol(testM)/2, 2)
    t(apply(testM, 1, FUN=tapply, INDEX=g, sum))
    
    0 讨论(0)
提交回复
热议问题