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
しかし、私も顧客に遅れをとりたいです。したがって、4 番目の行では、遅れた日付は何もないはずです..同様に、3 番目の顧客の場合、最初の行/エントリは通知され、最後の行には 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