面对子集计算的困难 . 我可以使用 ave
, tapply
, ddply
获得客户(因子)平均购买的整体统计数据,但我无法为每位客户计算 visit by visit 统计数据 . 下面的一些简化数据说明了我的数据和理想的结果 .
当前数据帧:(请注意,访问#1是最近的访问)
customer visit date purchase_amt
sarah 2 2013-08-09 5
sarah 3 2013-07-21 8
sarah 4 2013-06-23 9
sarah 5 2013-06-02 1
sarah 1 2013-08-20 8
henry 1 2013-07-04 4
che 1 2013-08-27 2
che 2 2013-07-27 1
che 3 2013-07-05 8
che 4 2013-06-14 3
dt 3 2013-04-05 9
dt 2 2013-06-07 1
dt 1 2013-07-11 6
这些是我寻求的结果:
customer visit date purchase_amt days since amt_diff
sarah 2 2013-08-09 5 19 -3
sarah 3 2013-07-21 8 28 -1
sarah 4 2013-06-23 9 21 8
sarah 5 2013-06-02 1 NA NA
sarah 1 2013-08-20 8 11 3
henry 1 2013-07-04 4 NA NA
che 1 2013-08-27 2 31 1
che 2 2013-07-27 1 22 -7
che 3 2013-07-05 8 21 5
che 4 2013-06-14 3 NA NA
dt 3 2013-04-05 9 NA NA
dt 2 2013-06-07 1 63 -8
dt 1 2013-07-11 6 34 5
总而言之,我想找到一个客户的最近访问及其属性,然后找到下一个访问属性并计算两者的各种统计数据 . 没有更多先前访问时返回“NA” .
3 回答
此解决方案仅使用R的基数并保留输入的原始顺序:
结果是:
更新:对代码的微小改进 .
像这样的东西?假设您的数据被称为
df
:这是与@Henrik一致的data.table解决方案: