2017-08-11 84 views
0

好了,所以我期待創建滾動滯後於R.滾動滯後差異

vec <- c(43.79979, 44.04865, 44.17308, 44.54638, 44.79524, 44.79524, 44.79524, 44.42195, 44.54638, 44.79524, 44.42195, 43.30206, 43.30206, 43.17764, 43.30206) 

> length(vec) 
[1] 15 

差異這是我到目前爲止已經試過:

vec1 <- rollapply(vec, width = 2, fill = NA, FUN = diff) 

這給出了這樣的輸出:

[1] 0.24886 0.12443 0.37330 0.24886 0.00000 0.00000 -0.37329 0.12443 0.24886 -0.37329 -1.11989 0.00000 -0.12442 0.12442  NA 

> length(vec1) 
[1] 15 

注意我們在元素15中有一個NA值。

所以我想這樣做,DIFF在滯後的發言權滯後1,2和3 ...所以上面的代碼並不滿足這一點,所以我嘗試以下:

lag1 <- diff(vec, lag = 1, differences = 1, arithmetic = TRUE, na.pad = TRUE) 
lag2 <- diff(vec, lag = 2, differences = 1, arithmetic = TRUE, na.pad = TRUE) 
lag3 <- diff(vec, lag = 3, differences = 1, arithmetic = TRUE, na.pad = TRUE) 
length(lag1) 
length(lag2) 
length(lag3) 

這樣做的結果:

> lag1 
[1] 0.24886 0.12443 0.37330 0.24886 0.00000 0.00000 -0.37329 0.12443 0.24886 -0.37329 -1.11989 0.00000 -0.12442 0.12442 
> lag2 
[1] 0.37329 0.49773 0.62216 0.24886 0.00000 -0.37329 -0.24886 0.37329 -0.12443 -1.49318 -1.11989 -0.12442 0.00000 
> lag3 
[1] 0.74659 0.74659 0.62216 0.24886 -0.37329 -0.24886 0.00000 0.00000 -1.24432 -1.49318 -1.24431 0.00000 
> length(lag1) 
[1] 14 
> length(lag2) 
[1] 13 
> length(lag3) 
[1] 12 

注意,做上述滯後差異的時候......它放在它減去的值上...所以它把我們的當前值線DIFF結果 - 滯後值。它將差異結果放在滯後值的位置上。然後我們失去了矢量的長度。我希望實際上將差異結果放在起始數字(差異)上,並將領先的數值放在數據集開始時的缺失值。

使用滯後2期爲EN例子,這是我想要的結果:

> lag2 
[1] NA NA 0.37329 0.49773 0.62216 0.24886 0.00000 -0.37329 -0.24886 0.37329 -0.12443 -1.49318 -1.11989 -0.12442 0.00000 

有誰知道如何糾正此問題的方法?

要也許解釋一下:

這是向量的開始:

vec <- c(43.79979, 44.04865, 44.17308..... 

所以,如果我們做一個滯後2差...

我們採取的第3元素... 44.17308 - 43.79979 = 0.37329的結果。

所以我想有NA NA 0.37329

不是把0.37329在新LAG2矢量第一的位置。

+0

'C(REP(NA,n)時,DIFF(VEC,滯後= N,差異= 1,算術= TRUE,na.pad = TRUE))' –

+0

AHA - 我看到......所以實際上通過c(rep(NA,n)...)導入矢量中,然後差異被計算出來,以便它們被放置在我想要的位置。好大的 –

回答

1

就像在Zoo lag diff back in data frame

vec = c(43.79979, 44.04865, 44.17308, 44.54638, 44.79524, 44.79524, 44.79524, 44.42195, 44.54638, 44.79524, 44.42195, 43.30206, 43.30206, 43.17764, 43.30206) 
require(zoo) 

apply(lag(zoo(vec), c(-2,0), na.pad = TRUE), 1L, diff) 

#> apply(lag(zoo(vec), c(-2,0), na.pad = TRUE), 1L, diff) 
#  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15 
#  NA  NA 0.37329 0.49773 0.62216 0.24886 0.00000 -0.37329 -0.24886 0.37329 -0.12443 -1.49318 -1.11989 -0.12442 0.00000 
+0

錯誤:'n'必須是一個非負整數標量,不是長度2的兩倍。真的不知道,但我不認爲它接受c(-2,0) –