R中矩阵的单列中多列与行值之和
我有一个矩阵,比如:R中矩阵的单列中多列与行值之和,r,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
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
我的问题是做这件事的最好方法是什么
我取了和,用向量替换了矩阵
X<-rowSums(m[,c(1,2,3)]); m[,1] <- X; m <- m[,-c(2,3)]
X我们可以使用列的数字索引来子集并执行行和
,然后使用行和
中未使用的列执行cbind
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
我们可以使用列的数字索引来子集并执行行和
,然后使用行和
中未使用的列执行cbind
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
您还可以使用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
无疑是计算速度更快的方法。您也可以使用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
无疑是计算速度更快的方法。感谢您的快速回复。我一开始是这样做的,但是对于我的大型矩阵,我花了很多时间,不亚于我在这里所做的。谢谢你的快速回复。我最初是这样做的,但我的大型矩阵需要花费大量时间,不亚于我在这里所做的。