2013-07-29 58 views
0

我试图延迟DataFrame中的一些变量(并且明确避免使用时间序列),并得到一个有趣的结果。准确地说,我试图将一些滞后信息组合到一个对象中,即称为“订单”的列的1和2周期延迟。下面是我在做什么:滞后在R中的多个时间段

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 

我很明白为什么我得到这个错误,因为我已经没有问题,使用滞后()函数之前多次混淆。也许这是我的一个大脑放屁,但我想和你们核对一下,看看发生了什么。

编辑

应该更清楚这里 - 我期待填补受影响与来港滞后指标。我上面的我的作品表现出滞后强迫数据帧到动物园对象,像这样:

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

据我所知,'lag'的'k'参数只接受一个整数。 – joran

+0

你应该意识到'lag'会返回一个时间序列对象,所以如果你明确地试图避免它(不确定原因?),那可能不是最好的选择。另外,你确定你想'K'是否定的吗? –

+0

@RicardoSaporta:我确定他们希望'k'是负面的。 '滞后'使用非常规惯例,即k值的正值滞后于价值。 –

回答

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,并在最后放置元素,这是您在数据框或矩阵滞后时所需的。

+0

谢谢。只是我在找什么。 – Bryan

+0

不客气! – andybega

2

尝试,而不是执行以下操作:

sapply(-1:-2, function(k) lag(data$orders, k=k)) 

您可能需要使用, simplify=FALSE如果你想保持对以前的答案的属性

+0

我试过了你的代码,但sapply函数不会吐出一个滞后矩阵 - 它只是重复现有的'data $ orders'列。 – Bryan

+0

@ user1884063,因此我关于将简化设置为false并保留属性的评论。这并不完全清楚你期望输出是什么。如果你可以编辑你的问题来包含一个例子,这将有帮助 –

+0

对不起。我编辑了上面的问题。 – Bryan