【问题标题】:avoiding for loops when generating lagged variables in R (and using zoo)在 R 中生成滞后变量(和使用 zoo)时避免 for 循环
【发布时间】:2012-11-01 02:24:42
【问题描述】:

我正在为具有 79,000 个观测值的时间序列生成大量滞后变量(实际上是 365 个)。

我目前在数据框OrdersData 中有一个名为prospectdrops 的列。我先把它转换成zoo格式使用lag()函数:

prospectdrops<-zoo(OrdersData$prospectdrop)

然后我执行for循环:

for (i in 1:365){
  prospectdrops[paste("lag",i,"day",sep="")] <- lag(prospectdrops,i*24,na.pad=TRUE)
}

然后我不得不再次使用 cbind 循环来绑定它们,为 data.frame() 做准备

for (i in 1:365){
cbind(prospectdrops, prospectdrops[paste("lag",i,"day",sep="")])
}

可以理解,R 中的 for 循环函数需要很长时间。我知道“应用”可能是答案,但在函数描述中看不到直接比较器。有什么想法吗?

【问题讨论】:

    标签: r time-series zoo


    【解决方案1】:

    lag.zoo 中的k 可以是向量。见?lag.zoo

    x <- zoo(11:21)
    lag(x,1:3)
    

    【讨论】:

    • 谢谢!数据是每小时的,但我希望按天计算滞后(因此我的 24 小时乘数)。在滞后函数中,我如何让它滞后 (x, 24...48....72... 等 365 次迭代?我再次试图避免 for() 循环。
    • 如果你想要滞后 24 和滞后 48,你只需要做 lag(x,c(24,48)) 等。对于所有 365 来说,说 lag(x, (1:365)*24)
    猜你喜欢
    • 2014-07-17
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多