R中用户的邻接矩阵

时间:2014-04-16 12:14:48

标签: r matrix binary igraph adjacency-matrix

我有如下数据 -

user_id     post_id
24376261    204506440
98461       204446324
98461       203026202
98461       203031838
311542      204351465
875740      203031838

此数据表示用户在网站的文章/帖子中发表评论的帖子。 现在,我需要在行和列中创建一个带有user_id的矩阵,如果这些用户通过博客帖子连接,则值为1,即我想要的输出看起来像这样 -

user       24376261 98461   311542  875740
24376261    1       0       0       0
98461       0       1       0       1
311542      0       0       1       0
875740      0       1       0       1

我怎样才能在R中这样做?我尝试从这个问题中遵循Brian方法 - Adjacency matrix in R 但是我得到了以下类的R对象 -

> class(am)
[1] "dgCMatrix"
attr(,"package")

如何将其转换为data.frame或可以导出到R?

的内容

1 个答案:

答案 0 :(得分:1)

这是一种可以获得所需输出的方法:

tcrossprod(table(mydf))
#           user_id
# user_id    98461 311542 875740 24376261
#   98461        3      0      1        0
#   311542       0      1      0        0
#   875740       1      0      1        0
#   24376261     0      0      0        1
(tcrossprod(table(mydf)) != 0) + 0
#           user_id
# user_id    98461 311542 875740 24376261
#   98461        1      0      1        0
#   311542       0      1      0        0
#   875740       1      0      1        0
#   24376261     0      0      0        1

如果您希望结果为data.frame,则可以将输出包装在as.data.frame.matrix中。


这假设" mydf"定义为:

mydf <- structure(list(user_id = c(24376261L, 98461L, 98461L, 98461L, 
311542L, 875740L), post_id = c(204506440L, 204446324L, 203026202L, 
203031838L, 204351465L, 203031838L)), .Names = c("user_id", "post_id"), 
class = "data.frame", row.names = c(NA, -6L))