我试图在数据框架中滞后一些变量(并明确避免使用时间序列),并且得到了一个有趣的结果。确切地说,我试图将一些滞后数据组合成一个对象,即称为“顺序”的列的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
我很困惑为什么我收到这个错误,因为我之前已多次使用lag()函数而没有任何问题。也许这对我来说是一个大脑放屁,但我想和你们一起检查一下发生了什么。
编辑
这里应该更加明确 - 我希望填补受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
当然,我可以将新数据重新强制回数据框,但是要避免这些步骤。
答案 0 :(得分:2)
请尝试以下方法:
sapply(-1:-2, function(k) lag(data$orders, k=k))
如果您想保留属性
,可能需要使用, simplify=FALSE
答案 1 :(得分:2)
在前一个答案的基础上,试试这个:
foo <- function(k) c(rep(NA, abs(k)), lag(data$orders, k=k)[abs(k):length(data$orders)])
sapply(-1:-2, foo)
对于向量, lag
将返回相同长度的向量,当您将它们组合在数据框或矩阵中时,您将获得相同的序列。它不会在末尾填充NA和drop元素,这是在数据框或矩阵中滞后时所需的。