使用data.table中的先前观察创建新近度变量

时间:2017-09-15 09:14:05

标签: r data.table

我愿意创建一个名为新近度的新变量 - 最近客户的交易 - 这对RFM分析很有用。定义如下:我们每周观察每个客户的交易日志,并分配名为" trans"如果客户进行了交易。如果她在该周进行交易,则新近度变量将等于周数,否则新近度将等于先前的新近度值。为了更清楚,我还为您创建了一个演示数据表。

demo<-data.table( cust=rep(c(1:3), 3))
demo[,week:=seq(1,3,1),by=cust]
demo[, trans:=c(1,1,1,0,1,0,1,1,0)]
demo[, rec:=c(1,1,1, 1,2,1,3,3,1)]

我需要计算&#34; rec&#34;我在demo data.table中手动输入的变量。还请考虑一下,我可以用循环来处理它,这需要花费很多时间。因此,如果您使用data.table方式帮助我,我将不胜感激。提前致谢。

1 个答案:

答案 0 :(得分:1)

这适用于示例:

demo[, v := cummax(week*trans), by=cust]

   cust week trans rec v
1:    1    1     1   1 1
2:    2    1     1   1 1
3:    3    1     1   1 1
4:    1    2     0   1 1
5:    2    2     1   2 2
6:    3    2     0   1 1
7:    1    3     1   3 3
8:    2    3     1   3 3
9:    3    3     0   1 1
  

我们每周观察每个客户的交易日志并分配名为&#34; trans&#34;的虚拟变量。如果客户进行了交易。如果她在该周进行交易,则新近度变量将等于周数,否则新近度将等于之前的新近度值。

这意味着获取累积的最大周数,忽略没有交易的周数。由于周是正数,我们可以将无交易周视为零。