R中特定行分组求和的有效方法
举个简单的例子,我有一个R中特定行分组求和的有效方法,r,matrix,R,Matrix,举个简单的例子,我有一个3x5矩阵 mat <- matrix(rep(seq(5),3),nrow=3,byrow = T) 这意味着对于mat的第一行,我们将求和1+2=3、3+4=7和5=5,以创建新矩阵mat2的第一行。我们对其他两个元素进行类似的处理,对应于新矩阵的第2行和第3行 > mat2 [,1] [,2] [,3] [1,] 3 7 5 [2,] 3 3 9 [3,] 3 3 5 我怎样才能有效地创
3x5
矩阵
mat <- matrix(rep(seq(5),3),nrow=3,byrow = T)
这意味着对于mat
的第一行,我们将求和1+2=3
、3+4=7
和5=5
,以创建新矩阵mat2
的第一行。我们对其他两个元素进行类似的处理,对应于新矩阵的第2行和第3行
> mat2
[,1] [,2] [,3]
[1,] 3 7 5
[2,] 3 3 9
[3,] 3 3 5
我怎样才能有效地创建这个?我可能会有一个mat
,它有许多行和许多列。我们可以这样做
t(sapply(seq_len(nrow(mat)), function(i) sapply(map.list[[i]],function(j) sum(mat[i, j]))))
# [,1] [,2] [,3]
#[1,] 3 7 5
#[2,] 3 3 9
#[3,] 3 3 5
或者另一种选择是
library(reshape2)
dM <- melt(map.list)[, 3:1]
m1 <- sapply(split(mat[as.matrix(dM[-2])],
interaction(dM[1:2], drop = TRUE, lex.order = TRUE)), sum)
matrix(m1, 3, 3, byrow=TRUE)
# [,1] [,2] [,3]
#[1,] 3 7 5
#[2,] 3 3 9
#[3,] 3 3 5
library(重塑2)
dM我想最后一个值应该是5。您尚未更改map.list的输入数据集的值
library(reshape2)
dM <- melt(map.list)[, 3:1]
m1 <- sapply(split(mat[as.matrix(dM[-2])],
interaction(dM[1:2], drop = TRUE, lex.order = TRUE)), sum)
matrix(m1, 3, 3, byrow=TRUE)
# [,1] [,2] [,3]
#[1,] 3 7 5
#[2,] 3 3 9
#[3,] 3 3 5
map.list <- list(list(c(1,2),c(3,4),5),
list(c(1,2),3,c(4,5)),
list(c(1,2),3,5))