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
根据您想要的输出去掉下三角。
我有一个类似于以下的数据集:
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
根据您想要的输出去掉下三角。