首页 文章

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

提问于
浏览
1

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

我的代码如下:

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 回答

  • 4

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

相关问题