这段代码给了我我想要的东西,但是对于更大的数据集,它变得非常慢。非常感谢有关如何以更快的速度做同样事情的一些见解。
df = data.frame(v1 = runif(1:15000), v2 = runif(1:15000))
rolling.monthlies = lapply(df, function(x){
p = sapply(1:length(x), function(i){
m = rev(x[1:i])
m = m[seq(1,length(m),21)]
m = rev(m)
})
return(p)
})
答案 0 :(得分:0)
我们可以像这样使用rev
消除两个seq
来电。我们也可以使用lapply
代替sapply
,因为没有简化保存尝试:
set.seed(123) # for reproducibility
df = data.frame(v1 = runif(1:15000), v2 = runif(1:15000)) # input
rolling.monthlies2 = lapply(df, function(x)
lapply( seq_along(x), function(i) x[seq(i %% 29, i, 29)] )
)