R - 两列的加权邻接矩阵

时间:2016-09-15 02:49:07

标签: r igraph

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

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

其中AuthorID标识ThreadID中的特定作者。线程可以包含来自许多作者的帖子,作者可以在许多帖子中发帖。

我在R中加权邻接矩阵,我可以使用igraph,它显示特定AuthorIDAuthorID内的另一个ThreadID进行通信的次数。因此,对于这些数据,矩阵应如下所示(AuthorID作为列和行标题):

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

提前致谢!

1 个答案:

答案 0 :(得分:6)

这是使用基本R功能的解决方案。首先,您的样本数据采用易于复制/粘贴的格式

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从作者那里获取作者 - 作者频率-thread table。最后我们使用lower.tri根据你想要的输出摆脱下三角。

相关问题