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

标签 r sparse-matrix

这是现有问题的扩展:Convert table into matrix by column names

我正在使用最终答案: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);

当我执行 reshape 命令时,我的问题就出现了。
  reshape(x, idvar="page_id", timevar="reco", direction="wide")

CPU 达到 100% 并永远停留在那里。机器(mac)的内存比 R 使用的内存多。我不明白为什么构建一个稀疏矩阵需要这么长时间。

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

建议?

谢谢,
华莱士

最佳答案

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

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))

关于R - 按列名将大表转换为矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9833052/

相关文章:

row - scipy.sparse : Set row to zeros

r - 在R中,当使用命名行时,稀疏矩阵列可以添加(连接)到另一个稀疏矩阵吗?

r - purrr 语法和map_深度

c++ - 如何将两个 Eigen::DiagonalMatrix 相乘并将结果添加到 Eigen::SparseMatrix?

python - 使用 scipy.sparse.linalg 线性系统求解器的问题

R 作为脚本运行时 validObject(.Object) 中的错误,但不在控制台中

r - 如何将逻辑变量转换为 Rattle 中的因子

javascript - 在 R (radarchart) 中操作基于 chart.js 的绘图

r - 在 R 中逐步回归中提取最终系数

r - 与 NA 的条件和