我正在开发一个市场购物篮分析项目,其数据包含一个代表一个ID的变量,另一个只包含一个篮子中的一个项目 . 用户中有大约50K的独特项目,但我在下面创建了一个简单的表格以供说明 .
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中包含的项目创建“产品”列(意思是,“Juice”和Water“列将被排除在外) . 此外,我正在使用一个相当大的34MM观测数据集,所以我正在寻找一个有效的解决方案,可以利用data.table API,并特别试图避免循环产品 . 我希望这个问题很明确 . 谢谢 .
1 回答
这有效: