R 前25行中每行的运行总和

R 前25行中每行的运行总和,r,R,我已经尝试了一段时间来产生一个代码,它为我带来了一个新的向量,它是一个原始向量的前25行的总和 如果我们说有一个有500行的变量Y,我想要一个新向量中的运行和,它包含行的和[1:25],那么对于Y的长度,[2:26],如下所示: y<-1:500 runsum<-function(x){ cumsum(x)-cumsum(x[26:length(x)]) } new<-runsum(y) y此函数计算前面24个值与实际值之和: movsum <- functi

我已经尝试了一段时间来产生一个代码,它为我带来了一个新的向量,它是一个原始向量的前25行的总和

如果我们说有一个有500行的变量Y,我想要一个新向量中的运行和,它包含行的和[1:25],那么对于Y的长度,[2:26],如下所示:

y<-1:500
runsum<-function(x){
   cumsum(x)-cumsum(x[26:length(x)])
}

new<-runsum(y)

y此函数计算前面24个值与实际值之和:

 movsum <- function(x,n=25){filter(x,rep(1,n), sides=1)}

movsum除了罗兰的答案,你还可以使用动物园图书馆

library ( zoo )
y <- 1:500
rollapply ( zoo ( y ), 25, sum )
图书馆(动物园)

y我更喜欢罗兰的答案,因为它依赖于时间序列函数,可能会非常快。既然您提到您开始使用
apply()
和friends,下面是一种方法:

y<-1:500
#How many to sum at a time?
n <- 25
#Create a matrix of the appropriate start and end points
mat <- cbind(start = head(y, -(n-1)), end = tail(y, -(n-1)))
#Check output
rbind(head(mat,3), tail(mat,3))
#-----
       start end
           1  25
           2  26
           3  27
[474,]   474 498
[475,]   475 499
[476,]   476 500

#add together
apply(mat, 1, function(x) sum(y[x[1]]:y[x[2]]))

#Is it the same as Roland's answer after removing the NA values it returns?
all.equal(apply(mat, 1, function(x) sum(y[x[1]]:y[x[2]])),
          movsum(y)[-c(1:n-1)])
#-----
[1] TRUE

yThanks-看到apply函数以与我的工作相关的方式使用是很有帮助的-我也会尝试这种方式,这样我至少知道它是如何工作的!这里的25号可以用dynamic吗?i、 e.价值向量