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