我试图在DataFrame中滞后一些变量(并且明确地避免使用时间序列),并且得到了一个有趣的结果。准确地说,我正试图将许多滞后组合成一个对象,即名为“orders”的列的1和2个周期的滞后。我正在做的事情是:
time=18:29
orders=c(76,77,78,79,72,81,79,85,93,81,72,60)
data=data.frame(time=time,orders=orders)
lagage<-lag(data$orders, k=-1:-2)
Error in `tsp<-`(`*tmp*`, value = p - (k/p[3L]) * c(1, 1, 0)) :
invalid time series parameters specified
In addition: Warning messages:
1: In if (k != round(k)) { :
the condition has length > 1 and only the first element will be used
2: In (k/p[3L]) * c(1, 1, 0) :
longer object length is not a multiple of shorter object length我对为什么会出现这个错误感到非常困惑,因为我以前使用了很多次延迟()函数,没有任何问题。也许这是我的大脑放屁,但我想和你们核实一下到底发生了什么。
编辑
这里应该更清楚--我想要填充受NAs滞后影响的指数。我在上面展示的那个滞后的东西是我把数据收集到动物园里的,就像这样:
data<-as.zoo(data)
lagage<-lag(data$orders, k=-1:-3)
lag-1 lag-2 lag-3
2 76 NA NA
3 77 76 NA
4 78 77 76
5 79 78 77
6 72 79 78
7 81 72 79
8 79 81 72
9 85 79 81
10 93 85 79
11 81 93 85
12 72 81 93当然,我可以将新数据重新强制返回到数据框架中,但希望避免这些步骤。
发布于 2013-07-29 16:27:41
在前面回答的基础上,尝试如下:
foo <- function(k) c(rep(NA, abs(k)), lag(data$orders, k=k)[abs(k):length(data$orders)])
sapply(-1:-2, foo)向量的lag将返回相同长度的向量,当将它们组合在数据帧或矩阵中时,只会得到相同的序列。它不使用NA元素,在末尾放置元素,这是在数据帧或矩阵中滞后时您想要的。
发布于 2013-07-29 14:35:23
相反,请尝试以下几点:
sapply(-1:-2, function(k) lag(data$orders, k=k))如果要保留属性,则可能需要使用, simplify=FALSE
https://stackoverflow.com/questions/17926561
复制相似问题