var2的次数(比例)使用data.table与var1唯一关联

时间:2016-07-14 18:16:12

标签: r data.table

我有一个购买数据集。每次购买都可以包含一种或多种产品。我对消费者一次只购买一种产品(单品购买)的情况感兴趣。我可以计算每件商品的购买时间和每个购物篮中的商品数量。

我想知道产品购买单品的百分比。

我需要使用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.table
prod_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

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