【问题标题】:Converting a data frame into adjacency matrix/edge list for network analysis将数据框转换为邻接矩阵/边列表以进行网络分析
【发布时间】:2016-10-19 04:15:47
【问题描述】:

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

我的代码如下:

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

【问题讨论】:

标签: r networking matrix adjacency-matrix network-analysis


【解决方案1】:

您可以使用 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")

【讨论】:

  • 是的,这正是我所追求的,非常感谢!
  • 嘿@SimonRicketts,如果答案对你有用,别忘了接受答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2010-12-13
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多