这是现有问题的扩展: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/