这段代码给了我想要的东西,但是对于更大的数据集,它会变得非常慢。我会非常感谢一些关于我如何以更快的速度做同样的事情的见解。
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)
})发布于 2016-09-09 22:17:26
我们可以像这样使用seq来消除两个rev调用。我们也可以使用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)] )
)https://stackoverflow.com/questions/39411340
复制相似问题