R中矩阵的单个列中的多个列的总和

时间:2017-09-21 06:31:28

标签: r

我有一个矩阵,如:

m <- matrix(c(1:32),ncol = 8)

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    5    9   13   17   21   25   29
[2,]    2    6   10   14   18   22   26   30
[3,]    3    7   11   15   19   23   27   31
[4,]    4    8   12   16   20   24   28   32

我想总结并组合多个说法,3列,例如。第1,2和3列,并用结果向量替换第1列的值。

      [,1] [,4] [,5] [,6] [,7] [,8]
[1,]    15   13   17   21   25   29
[2,]    18   14   18   22   26   30
[3,]    21   15   19   23   27   31
[4,]    24   16   20   24   28   32

我的问题是最好的方法是什么。

我已经取得了总和并用向量替换了矩阵。

X<-rowSums(m[,c(1,2,3)]); m[,1] <- X; m <- m[,-c(2,3)]

这些列在我的案例中命名。有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

我们可以使用列的数字索引进行子集,然后执行rowSums,然后cbind使用rowSums

中未使用的列
cbind(rowSums(m[,1:3]), m[, -(1:3)])
#     [,1] [,2] [,3] [,4] [,5] [,6]
#[1,]   15   13   17   21   25   29
#[2,]   18   14   18   22   26   30
#[3,]   21   15   19   23   27   31
#[4,]   24   16   20   24   28   32

答案 1 :(得分:0)

您还可以使用apply,这比rowSums()方法更长。

cbind(apply(m[,-c(4:ncol(m))], 1, function(x){sum(x,na.rm=T)} ), m[,c(4:ncol(m))])

#      [,1] [,2] [,3] [,4] [,5] [,6]
#[1,]   15   13   17   21   25   29
#[2,]   18   14   18   22   26   30
#[3,]   21   15   19   23   27   31
#[4,]   24   16   20   24   28   32

然而,rowSums无疑将是计算速度更快的方式。