2013-12-08 88 views
1

所以我剛收到一個數據集,其中一列數據幀是「循環」的。這一欄實際上是一個多年的循環(在我的情況下,1984-2007)。在另一列中,每個年份都有相應的美元金額(實際上是「資金水平」)。我的工作是爲這些資金水平創造一個滯後變量。但這裏有一個訣竅:每年的週期開始時,一個新的「變量」已經開始。因此,我所尋找的滯後變量不僅僅是整個資金列的倒退。相反,我需要爲數據的每個子週期創建資金滯後。更具體的,我的數據看起來有點像這樣:在R中滯後「循環」變量

X Y 
    1 7 
    2 8 
    3 9 
    1 4 
    2 6 
    3 5 
    1 2 
    2 4 
    3 3 

,我需要它看起來像這樣:

X Y 
    1 NA 
    2 7 
    3 8 
    1 NA 
    2 4 
    3 6 
    1 NA 
    2 2 
    3 4 

我怎麼會去這樣做呢?非常感謝你的幫助!

-JMC

回答

2

這應該工作。 (我經常忘記命名FUN參數和ave然後用神祕的錯誤消息抱怨)

#Wrong dfrm$Y <- ave(dfrm$Y, dfrm$X, FUN=function(x) c(NA, x)) 

缺乏適當的分組因子來標記不同的類別時間序列的,我決定CUE斷X == 1:

dfrm$Y <- ave(dfrm$Y, cumsum(dfrm$X==1), FUN=function(x) c(NA, x[-length(x)])) 
+0

謝謝 - 我不知道ave()函數。但是,我的時間序列週期問題並不總是始於同一年。有沒有辦法改變這個代碼來以不同的方式提示系列? – user3076619

+1

+1 - OP,也許試試'cumsum(c(TRUE,diff(X)!= 1))'作爲'ave'中的分組變量。 – flodel

+0

我想'cumsum(c(0,diff(x)<1))'可以處理開始時不規則的年份序列以及有空位(只要它們首先正確地「循環」 「。) –