在 R 中创建稀疏矩阵
Creating a sparse matrix in R
我有一个数据框 Likes n 个用户和 m 个 likes,userid 和 likeid1 : likeidm 作为我的变量。具体用户 ID 存储在第 1 列(Likes$userid),单元格包含 1 或 0,具体取决于用户是否喜欢具有相应 likeid 的页面。
library(Matrix)
Likes <- data.frame(userid=c("n1","n2"),
m1=c(0,1),
m2=c(0,0),
m3=c(0,0),
m4=c(1,0)
)
Likes [1,1:5]
userid m1 m2 m3 m4
1 n1 0 0 0 1
现在,我想创建一个稀疏矩阵。我将如何在以下代码中指定 j ?我知道我这样做的方式不对,因为从技术上讲,id 不在列中,但已经在我的数据框中指定为变量。
sM_Likes <- sparseMatrix(Likes, i=likes$userid, j=1,c(2:ncol(Likes)), x=1)
提前致谢(请为这个非常基本的问题道歉)。
我试图通过构建一个像您在问题中描述的对象(我现在已经将其编辑到问题中)并向其附加一些额外的假行来重现该问题。
library(Matrix)
Likes <- data.frame(userid=c("n1","n2"),
m1=c(0,1),
m2=c(0,0),
m3=c(0,0),
m4=c(1,0)
)
我发现 运行 你的代码抛出了不同的错误:
sM_Likes <- sparseMatrix(Likes, i=likes$userid, j=1,c(2:ncol(Likes)), x=1)
Error in sparseMatrix(Likes, i = likes$userid, j = 1,
c(2:ncol(Likes)), : exactly one of 'i', 'j', or 'p' must be missing
from call
我在评论中提到过几次,因为我认为是导致问题的原因。您更正了 j
参数的规范,现在可以使用了:)
您在有关列名称的评论中还提出了一个跟进问题。我认为这应该可以解决:
devtools::install_github("ben519/mltools")
require(mltools)
dt <- data.table(
intCol=c(1L, NA_integer_, 3L, 0L),
realCol=c(NA, 2, NA, NA),
logCol=c(TRUE, FALSE, TRUE, FALSE),
ofCol=factor(c("a", "b", NA, "b"), levels=c("a", "b", "c"), ordered=TRUE),
ufCol=factor(c("a", NA, "c", "b"), ordered=FALSE)
)
sparsify(dt)
sparsify(dt, sparsifyNAs=TRUE)
sparsify(dt[, list(realCol)], naCols="identify")
sparsify(dt[, list(realCol)], naCols="efficient")
我有一个数据框 Likes n 个用户和 m 个 likes,userid 和 likeid1 : likeidm 作为我的变量。具体用户 ID 存储在第 1 列(Likes$userid),单元格包含 1 或 0,具体取决于用户是否喜欢具有相应 likeid 的页面。
library(Matrix)
Likes <- data.frame(userid=c("n1","n2"),
m1=c(0,1),
m2=c(0,0),
m3=c(0,0),
m4=c(1,0)
)
Likes [1,1:5]
userid m1 m2 m3 m4
1 n1 0 0 0 1
现在,我想创建一个稀疏矩阵。我将如何在以下代码中指定 j ?我知道我这样做的方式不对,因为从技术上讲,id 不在列中,但已经在我的数据框中指定为变量。
sM_Likes <- sparseMatrix(Likes, i=likes$userid, j=1,c(2:ncol(Likes)), x=1)
提前致谢(请为这个非常基本的问题道歉)。
我试图通过构建一个像您在问题中描述的对象(我现在已经将其编辑到问题中)并向其附加一些额外的假行来重现该问题。
library(Matrix)
Likes <- data.frame(userid=c("n1","n2"),
m1=c(0,1),
m2=c(0,0),
m3=c(0,0),
m4=c(1,0)
)
我发现 运行 你的代码抛出了不同的错误:
sM_Likes <- sparseMatrix(Likes, i=likes$userid, j=1,c(2:ncol(Likes)), x=1)
Error in sparseMatrix(Likes, i = likes$userid, j = 1, c(2:ncol(Likes)), : exactly one of 'i', 'j', or 'p' must be missing from call
我在评论中提到过几次,因为我认为是导致问题的原因。您更正了 j
参数的规范,现在可以使用了:)
您在有关列名称的评论中还提出了一个跟进问题。我认为这应该可以解决:
devtools::install_github("ben519/mltools")
require(mltools)
dt <- data.table(
intCol=c(1L, NA_integer_, 3L, 0L),
realCol=c(NA, 2, NA, NA),
logCol=c(TRUE, FALSE, TRUE, FALSE),
ofCol=factor(c("a", "b", NA, "b"), levels=c("a", "b", "c"), ordered=TRUE),
ufCol=factor(c("a", NA, "c", "b"), ordered=FALSE)
)
sparsify(dt)
sparsify(dt, sparsifyNAs=TRUE)
sparsify(dt[, list(realCol)], naCols="identify")
sparsify(dt[, list(realCol)], naCols="efficient")