将数据框转换为邻接矩阵/边列表进行网络分析

4

我正在尝试将在线论坛的数据框转换为社交网络,但是我不知道如何将数据转换为网络分析所需的邻接矩阵/边列表。

我的代码如下:

library(igraph)  
graph.data.2002 <- as.matrix(data.2002[,2:3])  
g.2002 <- graph.data.frame(graph.data.2002, directed=FALSE)  
plot(g.2002, vertex.size = 1, vertex.label=NA)  

我正在使用R进行分析。目前的问题是,作者通过ThreadID相互链接,但在进行网络分析时,它会将ThreadID作为节点包含在内。理想情况下,我希望有一个邻接矩阵/边缘列表,如果一个作者与同一线程上的所有作者互动,则显示1。
(第一次发帖,请告诉我是否有任何遗漏/不当之处)
当前数据如下:
ThreadID    AuthorID
659289  193537
432269  136196
572531  170305
230003  32359
459059  47875
635953  181593
235116  51993

所以您希望将其作为两列 - 比如作者1,作者2 - 并列出每个配对?您提供的示例并不是非常有信息量,因为每个作者和线程都是无关的。您能否澄清您想要的输出是什么? - thelatemail
你好,欢迎来到StackOverflow。请花些时间阅读帮助页面,特别是名为“我可以在这里问什么话题?”和“我应该避免提出哪些类型的问题?”的部分。更重要的是,请阅读Stack Overflow问题清单。你可能还想了解最小化、完整化和可验证示例 - symbolrush
http://finzi.psych.upenn.edu/R/library/nettools/html/mat2adj.html - gd047
嘿,抱歉之前的帖子表达不够清晰,下面的答案解决了问题。我会在以后确保我的帖子更加详细 :) - Simon Ricketts
1个回答

6
你可以使用 inner_join 来获取类似于边缘列表的东西(只需要进行一些轻微的格式化即可)。
如果我理解正确,test 1 应该只有一个连接,连接作者193537和32359,他们在线程659289上。
test1 <- data.frame(ThreadID = c(659289, 432269, 572531, 659289),
                 AuthorID = c(193537, 136196, 170305, 32359))
test2 <- dplyr::inner_join(test1, test1, by = "ThreadID")[,-1]
test3 <- apply(test2, 2, as.character) #AuthorID as character will become vertex ID

检查您是否得到了期望的结果:

library(network)
test.network <- network(test3, directed = FALSE)
as.sociomatrix(test.network)
as.edgelist(test.network)
plot(test.network, label = test.network%v%"vertex.names")

是的,这正是我想要的,非常感谢! - Simon Ricketts
嘿@SimonRicketts,如果答案对您有用,请不要忘记接受答案! - paqmo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接