我愿意创建一个名为新近度的新变量 - 最近客户的交易 - 这对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方式帮助我,我将不胜感激。提前致谢。
答案 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;的虚拟变量。如果客户进行了交易。如果她在该周进行交易,则新近度变量将等于周数,否则新近度将等于之前的新近度值。
这意味着获取累积的最大周数,忽略没有交易的周数。由于周是正数,我们可以将无交易周视为零。