data.table中的“时间序列”描述性统计?

时间:2014-03-18 15:28:19

标签: r time-series data.table

有一个包含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:       A        1 1
2:       A        2 1
3:       B        3 2

接下来,

我想计算每个type = 3给定的user_id,brand_id固定,多少(type = 0或type = 2)?在购买之前点击并添加到购物车的统计数据是什么,给定用户,产品是否已修复?

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

这就是我想要的:

    user_id brand_id N  Click.N AddingtoCart.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)]

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

你能提出一些建议吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

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

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,每当有特定用户/品牌的新购买时,该ID会递增。