这是对现有问题的扩展:按列名将表转换为矩阵
我正在使用最终答案: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,所以我应该拥有最新版本。
有什么建议吗?
谢谢,华莱士
我会使用包中的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))
Run Code Online (Sandbox Code Playgroud)