【发布时间】:2014-06-24 22:43:10
【问题描述】:
我有一个大文件,格式如下:x
userid,productid,freq
293994,8,3
293994,5,3
949859,2,1
949859,1,1
123234,1,1
123234,3,1
123234,4,1
...
它提供给定用户购买的产品及其频率。我正在尝试将其制成一个矩阵,该矩阵将所有产品标识作为列,将用户标识作为行,频率值作为条目。所以预期的输出是
1 2 3 4 5 8
293994 0 0 0 0 3 3
949859 1 1 0 0 0 0
123234 1 0 1 1 0 0
这是一个稀疏矩阵。我试过做table(x[[1]],x[[2]]),它适用于小文件,但超过一点table会出错
Error in table(x[[1]], x[[2]]) :
attempt to make a table with >= 2^31 elements
Execution halted
有没有办法让它工作?我在 R-3.1.0 上,它应该支持 2^51 大小的向量,所以很困惑为什么它不能处理文件大小。我有 40MM 行,总文件大小为 741M。提前致谢
【问题讨论】:
-
如果您想要真正的稀疏矩阵,请查看“Matrix”包。
-
你试过
aggregate(freq ~ userid + productid,data = df,sum)吗? -
或者
library(tidyr); spread(x,productid,freq,fill = 0) -
一直在尝试
aggregate,但速度很慢。 -
聚合没有给出想要的结果。
标签: r data.table sparse-matrix reshape2