R生成稀疏矩阵

bro*_*oli 5 r sparse-matrix reshape2 data.table

我有一个大文件,其格式如下所示 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
...
Run Code Online (Sandbox Code Playgroud)

它为给定用户购买的产品及其频率.我正在尝试将它变成一个矩阵,它将所有productid作为列和userids作为行,并以频率值作为条目.所以预期的产出是

       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
Run Code Online (Sandbox Code Playgroud)

它是一个稀疏矩阵.我尝试过table(x[[1]],x[[2]])哪些适用于小文件,但超出一点table会产生错误

Error in table(x[[1]], x[[2]]) : 
 attempt to make a table with >= 2^31 elements
Execution halted
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个工作?我在R-3.1.0上,它应该支持2 ^ 51大小的向量,所以很困惑为什么它无法处理文件大小.我有40MM线,总文件大小为741M.提前致谢

edd*_*ddi 3

一种data.table方法是:

library(data.table)
library(reshape2)

# adjust fun.aggregate as necessary - not very clear what you want from OP
dcast.data.table(your_data_table, userid ~ productid, fill = 0L)
Run Code Online (Sandbox Code Playgroud)

您可以检查这是否适用于您的数据。

  • 我收到以下错误`dcast.data.table(x, deviceid ~ cxbrandid, fun = sum, fill = 0L) 中的错误:尚不支持长向量:../../src/include/Rinlinedfuns.h:137另外:警告消息:在 setattr(l, "row.names", .set_row_names(length(l[[1L]]))) 中:通过强制引入的 NA (2认同)