2013-08-28 48 views
0

變量我要創建鉛和R中的滯後變量,如下面創建超前和滯後R中

假設我有其中有關於客戶的訪問任何商店細節的數據幀...

CustomerID Dateofvisit 
1 1/2/2013 
1 1/3/2013 
1 1/7/2013 
2 1/9/2013 
2 1/14/2013 
2 2/14/2013 
3 1/4/2013 
3 1/5/2013 

我們可以看到,有3個客戶提供不同的訪問日期。當我在上面的應用滯後功能...(我創建了自己的功能,)..它變得像下面:

CustomerID Dateofvisit Laggeddate 
1 1/2/2013 - 
1 1/3/2013   1/2/2013 
1 1/7/2013   1/3/2013 
2 1/9/2013   1/7/2013 
2 1/14/2013  1/9/2013 
2 2/14/2013  1/14/2013 
3 1/4/2013   2/14/2013 
3 1/5/2013   1/4/2013 

但是,我想要落後於客戶a脹。所以對於第四排,落後的日期應該是沒有什麼的。類似的第三個客戶,第一排/入口應該是notihng和最後一排,我應該看到1/4/2013 ..我該怎麼做?

以下是代碼我使用的滯後/超前

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 
} 

以及如何我帶領/滯後他們:

#generate lead by 1 variable 
test$df_lead2<-shift(test$x,1) 
#generate lag by 1 variable 
test$df_lag2<-shift(test$x,-1) 

我所需的輸出是:

CustomerID Dateofvisit Laggeddate 
1 1/2/2013 - 
1 1/3/2013   1/2/2013 
1 1/7/2013   1/3/2013 
2 1/9/2013   - 
2 1/14/2013  1/9/2013 
2 2/14/2013  1/14/2013 
3 1/4/2013   - 
3 1/5/2013   1/4/2013 
+0

我*想*我明白了滯後的預期輸出的文字你的描述,但你應該添加所需的輸出(類似於失敗的嘗試,你在內)的例子無論是滯後和鉛。 – Henrik

回答

1

這是你想要什麼?

library(plyr) 
ddply(.data = df, .variables = .(CustomerID), mutate, 
    lagdate = c(NA, head(Dateofvisit, -1)), 
    leaddate = c(tail(Dateofvisit, -1), NA)) 
+0

看起來應該這樣做,我會讓你知道..謝謝Henrik ... – kaos1511