我有一个类似于以下内容的数据集:
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,它显示特定AuthorID
与AuthorID
内的另一个ThreadID
进行通信的次数。因此,对于这些数据,矩阵应如下所示(AuthorID
作为列和行标题):
1 2 3 4
1 . 3 0 1
2 . . 0 1
3 . . . 1
4 . . . .
提前致谢!
答案 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
根据你想要的输出摆脱下三角。