2013-07-29 38 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