R - 来自两列的加权邻接矩阵

R - weighted adjacency matrix from two columns

我有一个类似于以下的数据集:

AuthorID    ThreadID
   1           A
   2           A
   1           A
   2           A
   2           C
   3           B
   1           C
   4           B
   4           C
   4           C

其中 AuthorID 标识 ThreadID 中的特定作者。话题可以包含来自许多作者的 post,而作者可以在许多话题中 post。

我在 R 中的加权邻接矩阵之后,我可以将其与 igraph 一起使用,它显示了特定 AuthorID 与另一个 AuthorID 在 [=13= 中进行通信的次数].因此,对于这些数据,矩阵应如下所示(AuthorID 作为列和行标题):

   1  2  3  4
1  .  3  0  1
2  .  .  0  1
3  .  .  .  1
4  .  .  .  .

提前致谢!

这是一个使用基本 R 函数的解决方案。首先,您的示例数据采用简单的 copy/paste-able 格式

dd<-read.table(text="AuthorID    ThreadID
   1           A
   2           A
   1           A
   2           A
   2           C
   3           B
   1           C
   4           B
   4           C
   4           C
", header=T)

那你可以

x <- xtabs(~ThreadID+AuthorID, unique(dd)); 
mm <- crossprod(x,x)
mm[lower.tri(mm, TRUE)] <- NA

得到

        AuthorID
AuthorID  1  2  3  4
       1 NA  2  0  1
       2 NA NA  0  1
       3 NA NA NA  1
       4 NA NA NA NA

我们使用 xtabs 来计算出现次数。我们确保使用 unique 这样我们就不会在一个线程上计算作者两次(以同意您想要的输出。然后我们使用 crossprod 从作者线程中获取作者-作者频率table。最后,我们使用 lower.tri 根据您想要的输出去掉下三角。