【问题标题】:“Time Series” descriptive statistics in data.table?data.table 中的“时间序列”描述性统计?
【发布时间】:2014-03-18 15:28:19
【问题描述】:

有一个交易数据有4个字段:user_id、brand_id、type、time

bd = as.Date("2012-04-01")
SampleDT <- data.table(user_id = rep(c("A","B"), each = 5), brand_id = rep(1:5, c(4,1,3,1,1)), type = c(0,0,2,3,3,0,3,3,0,0), time = c(bd,bd+1,bd+1,bd+2,bd+2, bd+ -1:1, bd+2, bd+2))

每次观察都会记录用户在特定时间对特定产品的行为。

Type 字段中,有 3 个不同的值:0、2、3

0 : click

2: adding to shopping cart

3: buy

首先,我计算了每个用户购买了哪些产品。

setkey(SampleDT, user_id, brand_id)
SampleDT[type ==3, .N, by = key(SampleDT)]

如下:

user_id brand_id N 1:一个 1 1 2:A 2 1 3:乙 3 2

接下来,

我想计算每个type = 3 给定的user_id,固定的brand_id,有多少(类型=0 或类型= 2)?给定用户,固定产品,购买前点击和加入购物车的统计数据是多少?

结果中有 5 个字段。 user_id,brand_id,N(表示一个用户第N次购买某产品),Click.N(购买前多少type=0),AddingtoCart.N(购买前多少type=2)

这就是我想要的:

user_id brand_id N Click.N 添加到购物车.N 1:A 1 1 2 1 2:A 2 1 0 0 3:B 3 1 1 0 4:B 3 2 0 0
setkey(SampleDT, user_id, brand_id, time)
SampleDT[, .I[type==3], by = key(SampleDT)]

我想先找到行位置,但我不知道如何继续。

能否给点建议?

非常感谢!

【问题讨论】:

    标签: r time-series data.table


    【解决方案1】:

    编辑:根据用户数据的更改和 cmets 中的输入进行更新:

    SampleDT[, purch.id := c(0, head(cumsum(type==3), -1)), by=list(user_id, brand_id)]
    SampleDT[, 
      if(3 %in% type) .SD, 
      by=list(user_id, brand_id, purch.id)
    ][, 
      list(Click=sum(type==0), Cart=sum(type==2)), 
      by=list(user_id, brand_id, purch.id)
    ]
    

    生产:

       user_id brand_id purch.id Click Cart
    1:       A        1        0     2    1
    2:       A        2        0     0    0
    3:       B        3        0     1    0
    4:       B        3        1     0    0
    

    这里我们假设表格中的所有条目都是连续的,并且特定用户/品牌的所有操作都可以归因于后续购买。

    主要的变化是添加了一个购买 id,每次有特定用户/品牌的新购买时都会增加。

    【讨论】:

    • 非常感谢您的回答!抱歉打错了,我修改了 SampleDT 的代码,现在它是正确的。我试过你的代码,当用户修复了多次购买某些商品时它失败了。您可以检查 B 购买的 brand_id = 3 两次。所以应该有另一列 N 表示购买时间。
    • @Bigchao,查看更新。结果是相同的,尽管我的方法产生的N 列略有不同。
    • 非常感谢!这是一个很好的答案,尤其是在j部分,if (3 %in% type) .SD,我真的从中吸取了教训!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 2016-12-08
    相关资源
    最近更新 更多