在R中创建稀疏矩阵

时间:2018-07-05 23:55:42

标签: r matrix sparse-matrix

我有一个数据框 Like ,用于n个用户和点赞,具有 userid likeid1 likeidm 作为我的变量。特定的用户ID存储在第1列( Likes $ userid )中,并且该单元格包含1或0,具体取决于用户是否喜欢具有各自的likeid的页面。

100

现在,我想创建一个稀疏矩阵。如何在以下代码中指定j?我知道这样做的方式是不对的,因为从技术上讲,id不在列中,但已经在数据框中指定为变量。

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

预先感谢(并深表歉意)

1 个答案:

答案 0 :(得分:2)

我试图通过构造一个像您在问题中描述的对象(现在已将其编辑到问题中)并在其上附加一些其他伪造的行来重现该问题。

++a

我发现在此运行您的代码引发了另一个错误:

instance Monoid (Star a) where
    ...
  

sparseMatrix中的错误(喜欢,i =喜欢$ userid,j = 1,   c(2:ncol(Likes)),:必须完全缺少“ i”,“ j”或“ p”之一   通话中

我在评论中多次提到此问题,因为我认为是造成此问题的原因。您更正了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)