R 对滚动列的行求和
我需要应用一个滚动函数,对每两列的行求和,这样第1列和第2列的行将求和,第3列和第4列的行将求和,以此类推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 #[
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