【问题标题】:Creating a sparse matrix in R在 R 中创建稀疏矩阵
【发布时间】:2018-12-14 12:41:07
【问题描述】:

我有一个数据框 Likes 用于 n 个用户和 m 个喜欢,带有 useridlikeid1likeidm作为我的变量。特定的用户 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 &lt;- sparseMatrix(Likes, i=likes$userid, j=1,c(2:ncol(Likes)), x=1)

在此先感谢(并对这个非常基本的问题表示歉意)。

【问题讨论】:

  • 欢迎来到 StackOverflow!对于 r 标签中的第一次问题,这是一个不错的尝试。但是,对于代码调试,请始终根据 MCVEr 标签描述询问 reproducible 代码/数据,并提供所需的输出。您可能希望根据标签描述使用dput() 进行分享。这是一种重现 R 数据的简单方法。您可以将凌乱的dput(data_frame_name)dput(head(data_frame_name)) 输出放在问题的底部(点击编辑)。
  • 看看这个问题是否有用:stackoverflow.com/questions/29479198/…
  • @Hack-R 感谢有关可重现代码的提示,我会尝试的。关于帖子中的解决方案(感谢 dmi3kno 的分享)我觉得这只回答了第一个问题(即我应该事先创建一个没有第一列的数据框)而不是第二个问题,还是我弄错了?
  • 谢谢。所以第二个问题是“我如何在下面的代码中指定 j?我”对吗?因为我认为问题的一部分是你应该只指定 3 个参数中的 2 个,我认为你已经指定了所有 3 个。
  • @Hack-R 我并不是要低估你的努力;)我的意思是我解决了这个问题,我创建了一个新的 df(不像原来的帖子那样),就像他们做的一样在教程中(df 具有列 userid 和 likeid),然后是 sparseMatrix(i=df$user_row,j=df$like_row,x=1)。我创建了这个问题,因为我想知道是否也可以解决创建这样的 df(而不是“稀疏”我现有的宽 df)。如果你发现是否有办法:如果你分享这个会很棒,但是,不要着急,因为我现在可以继续使用新的 df。谢谢!!:)

标签: r matrix sparse-matrix


【解决方案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)

稀疏矩阵中的错误(喜欢,i = likes$userid,j = 1, c(2:ncol(Likes)), : 必须缺少“i”、“j”或“p”中的一个 来自电话

我在 cmets 中多次提到这一点,因为我认为是导致问题的原因。您更正了 j 参数的规范,现在它可以工作了:)

您在 cmets 中还提出了一个关于列名的后续问题。我认为这应该可以解决这个问题:

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

【讨论】:

    猜你喜欢
    • 2016-01-13
    • 2018-09-20
    • 2012-01-10
    • 2017-03-31
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多