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

跟風遠走 提交于 2019-12-02 00:01:36
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

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

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

How about:

matrix(c(testM[, 1] + testM[, 2], testM[, 2] + testM[, 4]), nrow = 10)

a solution around your initial idea:

sapply(seq(2, ncol(testM), 2), function(x) apply(testM[, (x-1):x], 1, sum))
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!