我有一个购买数据集。每次购买都可以包含一种或多种产品。我对消费者一次只购买一种产品(单品购买)的情况感兴趣。我可以计算每件商品的购买时间和每个购物篮中的商品数量。
我想知道产品购买单品的百分比。
我需要使用data.table,因为我的真实数据是巨大的。
我制作了一个玩具数据集。
library(data.table)
DT <- data.table(id = 1:13, basket_id = c(1,1,2,3,4,4,5,5,6,7,7,7,8), prod_id = c(1,2,2,3,2,1,3,4,1,1,3,4,5))
# Count number of times each product is purchased
DT[,`:=`(NPurchased=.N),by=.(prod_id)]
# Count number of purchases in each basket
DT[,`:=`(BasketSize=.N), by=.(basket_id)]
#Number of times product appears with a BasketSize of 1
DT[BasketSize==1,`:=`( NPurchSolo =.N),by=.(prod_id)]
我认为下一步是在Norgsolo中用0替换NA值,但是当我添加
时出现错误DT[is.na(NPurchSolo),NPurchSolo:=0,with=FALSE]
&#34;我是无效的类型(矩阵)。也许在将来,2列矩阵可以返回DT的元素列表(在FAQ 2.14中的A [B]的精神中)。如果您对此感兴趣,请告知datatable-help,或者将您的意见添加到FR#657&#34;
这是前进的最佳方式吗?如果是这样,我的错误是什么?或者是否有更简单的方法来计算var2与var1唯一关联的次数(比例)使用data.table?
我想要的输出是带有条目
的data.tableprod_id NPurchSolo NPurchased proportion_solo
1 1 4 .25
2 1 3 .33333
3 1 3 .33333
4 2 0 0
5 1 1 1
答案 0 :(得分:2)
有人发布了一个让我走上正轨的答案,但现在它被删除了。它让我弄清楚了以下几点。 (编辑:第一行不是必要的。)
DT[, NpurchSolo := sum(BasketSize == 1), .(prod_id)]
FINAL=DT[, .(Npurchased = unique(NPurchased), NpurchSolo = sum(BasketSize == 1)), .(prod_id)]
FINAL[, proportion_solo := (NpurchSolo/Npurchased)]
> show(FINAL)
prod_id Npurchased NpurchSolo proportion_solo
1: 1 4 1 0.2500000
2: 2 3 1 0.3333333
3: 3 3 1 0.3333333
4: 4 2 0 0.0000000
5: 5 1 1 1.0000000