R 对滚动列的行求和

R 对滚动列的行求和,r,apply,rowsum,R,Apply,Rowsum,我需要应用一个滚动函数,对每两列的行求和,这样第1列和第2列的行将求和,第3列和第4列的行将求和,以此类推 m<-matrix(c(1,2,3,4,5,3,4,5,6,2,4,6,6,7,3,2,4,4,5,7),nrow=2,byrow=T) m您可以使用这种方法: m[,seq(1, ncol(m),2)] + m[,seq(2, ncol(m), 2)] # [,1] [,2] [,3] [,4] [,5] #[1,] 3 7 8 9 8 #[

我需要应用一个滚动函数,对每两列的行求和,这样第1列和第2列的行将求和,第3列和第4列的行将求和,以此类推

m<-matrix(c(1,2,3,4,5,3,4,5,6,2,4,6,6,7,3,2,4,4,5,7),nrow=2,byrow=T)

m您可以使用这种方法:

m[,seq(1, ncol(m),2)] + m[,seq(2, ncol(m), 2)]
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    3    7    8    9    8
#[2,]   10   13    5    8   12

可以使用矩阵乘法:

> n <- ncol(m)/2
> S <- diag(n)[rep(1:n, each=2),]
> S
      [,1] [,2] [,3] [,4] [,5]
 [1,]    1    0    0    0    0
 [2,]    1    0    0    0    0
 [3,]    0    1    0    0    0
 [4,]    0    1    0    0    0
 [5,]    0    0    1    0    0
 [6,]    0    0    1    0    0
 [7,]    0    0    0    1    0
 [8,]    0    0    0    1    0
 [9,]    0    0    0    0    1
[10,]    0    0    0    0    1
> m %*% S
     [,1] [,2] [,3] [,4] [,5]
[1,]    3    7    8    9    8
[2,]   10   13    5    8   12
>ns
[,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    1    0    0    0    0
[3,]    0    1    0    0    0
[4,]    0    1    0    0    0
[5,]    0    0    1    0    0
[6,]    0    0    1    0    0
[7,]    0    0    0    1    0
[8,]    0    0    0    1    0
[9,]    0    0    0    0    1
[10,]    0    0    0    0    1
>m%*%S
[,1] [,2] [,3] [,4] [,5]
[1,]    3    7    8    9    8
[2,]   10   13    5    8   12

另一种方法是将
m
转换为三维数组,然后在列上求和:

> X <- m
> dim(X) <- c(2,2,5)
> colSums(aperm(X, c(2,1,3)))
     [,1] [,2] [,3] [,4] [,5]
[1,]    3    7    8    9    8
[2,]   10   13    5    8   12
>X dim(X)和(aperm(X,c(2,1,3)))
[,1] [,2] [,3] [,4] [,5]
[1,]    3    7    8    9    8
[2,]   10   13    5    8   12

zoo::rollappy(t(m),2,sum,by=2)
谢谢@khasha,它必须是
t(rollappy(t(m),2,sum,by=2))
> X <- m
> dim(X) <- c(2,2,5)
> colSums(aperm(X, c(2,1,3)))
     [,1] [,2] [,3] [,4] [,5]
[1,]    3    7    8    9    8
[2,]   10   13    5    8   12