R-按列名称将BIG表转换为矩阵

Wal*_*ace 5 r sparse-matrix

这是对现有问题的扩展:按列名将表转换为矩阵

我正在使用最终答案:https : //stackoverflow.com/a/2133898/1287275

原始CSV文件矩阵大约有150万行,其中包含三列...行索引,列索引和一个值。所有数字均为长整数。底层矩阵是大小约为220K x 220K的稀疏矩阵,每行平均约7个值。

原始的read.table可以正常工作。

  x <- read.table("/users/wallace/Hadoop_Local/reference/DiscoveryData6Mo.csv", header=TRUE);
Run Code Online (Sandbox Code Playgroud)

我执行reshape命令时出现问题。

  reshape(x, idvar="page_id", timevar="reco", direction="wide")
Run Code Online (Sandbox Code Playgroud)

CPU命中率达到100%,并且永远存在。机器(Mac)的内存比R正在使用的内存更多。我不明白为什么构造稀疏矩阵要花这么长时间。

我正在使用默认的矩阵包。我没有安装任何额外的东西。几天前我刚刚下载了R,所以我应该拥有最新版本。

有什么建议吗?

谢谢,华莱士

flo*_*del 5

我会使用包中的sparseMatrix函数Matrix。典型用法是sparseMatrix(i, j, x),其中ijx是相同长度的三个矢量:分别行索引,列索引,并且在矩阵中的非零元素的值。这是一个示例,我尝试将变量名称和尺寸与您的规范相匹配:

num.pages <- 220000
num.recos <- 230000
N         <- 1500000

df <- data.frame(page_id = sample.int(num.pages, N, replace=TRUE),
                 reco    = sample.int(num.recos, N, replace=TRUE),
                 value   = runif(N))
head(df)
#   page_id   reco     value
# 1   33688  48648 0.3141030
# 2   78750 188489 0.5591290
# 3  158870  13157 0.2249552
# 4   38492  56856 0.1664589
# 5   70338 138006 0.7575681
# 6  160827  68844 0.8375410

library("Matrix")
mat <- sparseMatrix(i = df$page_id,
                    j = df$reco,
                    x = df$value,
                    dims = c(num.pages, num.recos))
Run Code Online (Sandbox Code Playgroud)