有一个包含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)]
我认为首先找到行位置,但我不知道如何继续。
你能提出一些建议吗?
非常感谢!
答案 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会递增。