【发布时间】:2013-08-31 10:51:58
【问题描述】:
我必须在 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 个客户,第一行/条目应该没有,在最后一行,我应该看到 2013 年 1 月 4 日.. 我该怎么做?
以下是我用于滞后/领先的代码
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
【问题讨论】:
-
我 认为 我理解您在预期输出的文本中对滞后的描述,但您应该添加所需输出的示例(类似于您包含的失败尝试) 用于滞后和领先。