我正在处理一个购物篮分析项目,并且有一个数据包含一个表示 ID 的变量,而另一个数据只包含一个篮子中的一个项目。用户中有大约 5 万个独特的项目,但我在下面创建了一个简单的表格来说明。
library(data.table)
dt = data.table(ID = c("1","1","1","1","2","2","2"),
product = c("Soda","Beer","Chips","Apple","Soda","Water","Juice"))
dt # original data looks like this
然后,我使用 dcast 函数将每个产品转换为具有二进制值的自己的列,表明它们是订单的一部分。
dcast.data.table(dt, ID ~ product, function(x) 1, fill = 0)
正如我所提到的,由于内存限制,我无法在整个数据集上使用此方法(因为这将为每个产品创建 50K 列)。因此,我试图找到一个解决方案,其中 dcast 仅根据仅包含在 ID ==1 中的项目创建“产品”列(这意味着将排除“果汁”和“水”列)。另外,我正在使用一个相当大的 34MM 观察数据集,所以我正在寻找一个可以利用 data.table API 的有效解决方案,并且特别试图避免循环通过产品。我希望这个问题很清楚。谢谢。