2015-02-10 64 views
5

我有一個問題處理時間序列R.對於R向量/數據幀,滯後的相反功能是什麼?

#--------------read data 

wb = loadWorkbook("Countries_Europe_Prices.xlsx") 
df = readWorksheet(wb, sheet="Sheet2") 

x <- df$Year 
y <- df$Index1 

y <- lag(y, 1, na.pad = TRUE) 
cbind(x, y) 

它給了我下面的輸出:

 x  y 
[1,] 1974 NA 
[2,] 1975 50.8 
[3,] 1976 51.9 
[4,] 1977 54.8 
[5,] 1978 58.8 
[6,] 1979 64.0 
[7,] 1980 68.8 
[8,] 1981 73.6 
[9,] 1982 74.3 
[10,] 1983 74.5 
[11,] 1984 72.9 
[12,] 1985 72.1 
[13,] 1986 72.3 
[14,] 1987 71.7 
[15,] 1988 72.9 
[16,] 1989 75.3 
[17,] 1990 81.2 
[18,] 1991 84.3 
[19,] 1992 87.2 
[20,] 1993 90.1 

但我想在y中的第一個值是50.8,等等。換句話說,我想得到一個負面的滯後。我不明白,我該怎麼辦?

我的問題與這個問題非常相似,但是我無法解決它。我想我還是不明白溶液(S)...

Basic lag in R vector/dataframe

+1

你可以輸入你的y矢量嗎? – 2015-02-10 13:22:24

+1

另一個選項當然是'y < - c(y [-1],NA)'。 – jbaums 2015-02-10 13:33:28

+1

什麼是dput? @jbaums哇,這真的是一個簡單的解決方案,我的問題!非常感謝! :) – 2015-02-10 13:44:50

回答

5

內置「引導」功能如何? (來自dplyr軟件包) 這不正是Ahmed功能的工作嗎?

cbind(x, lead(y, 1)) 

如果你希望能夠在同一個函數來計算正或負的滯後,我認爲他的「轉移」功能的「短」的版本:

shift = function(x, lag) { 
    require(dplyr) 
    switch(sign(lag)/2+1.5, lead(x, abs(lag)), lag(x, abs(lag))) 
} 

它所做的是創建2個案例,其中一個與另一個領導者相比較滯後,並根據滯後信號選擇一個案例(+1.5在這裏將{-1,+1}轉換爲{1,2}替代案例)。

+1

稍後我會嘗試此解決方案。沒有考慮dplyr軟件包。謝謝! – 2015-02-12 17:40:50

+1

完美的解決方案!真!非常感謝你們所有人:) – 2015-02-15 16:15:54

3

有這樣我從this link完全捕獲更簡單的方法。我將做什麼在這裏解釋什麼是你應該做的步驟:

首先通過運行下面的代碼創建以下功能:

shift<-function(x,shift_by){ 
    stopifnot(is.numeric(shift_by)) 
    stopifnot(is.numeric(x)) 

    if (length(shift_by)>1) 
     return(sapply(shift_by,shift, x=x)) 

    out<-NULL 
    abs_shift_by=abs(shift_by) 
    if (shift_by > 0) 
     out<-c(tail(x,-abs_shift_by),rep(NA,abs_shift_by)) 
    else if (shift_by < 0) 
     out<-c(rep(NA,abs_shift_by), head(x,-abs_shift_by)) 
    else 
     out<-x 
    out 
} 

這將創建一個名爲shift有兩個參數的功能;一個是你需要操作其滯後/領先的向量,另一個是你需要的滯後/潛在數量。

實施例:

假設有以下矢量:

x<-seq(1:10) 

x 
[1] 1 2 3 4 5 6 7 8 9 10 

如果需要x的一階滯後

shift(x,-1) 
[1] NA 1 2 3 4 5 6 7 8 9 

如果需要x的第一階鉛(負滯後)

shift(x,1) 
[1] 2 3 4 5 6 7 8 9 10 NA 
+1

真的很好的功能!非常感謝! :) – 2015-02-11 08:04:32

+1

瞭解'領導'功能? – agenis 2015-02-12 17:06:02

+1

@agenis剛剛檢查過。它的功能與上面的「shift」功能相同(僅適用於正面部分)。負面部分應該由通常的「滯後」功能來完成。 – athraa 2015-02-13 11:43:21