如何从边等于多个行值的数据帧创建Igraph网络?

时间:2019-04-08 16:47:03

标签: r igraph

我正在尝试将社交网络分析应用于国会的投票习惯,并且在建立自己的网络方面遇到困难。我有一个由100名参议员组成的data.frame,他们是如何赞助20项法案的(其中值代表不同的赞助程度)。简化的版本如下所示:

  X AkakaDanielK AlexanderLamar AllardWayne BarrassoJohn
1 B1            0              2           1            2
2 B2            0              0           0            0
3 B3            0              0           0            0
4 B4            0              0           0            0
5 B5            0              0           0            0
6 B6            0              0           0            0

我无法弄清楚如何使列成为顶点和边成为账单的共同赞助。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

为了完成此任务,您需要变换矩阵。在这里,我只是简单地复制您的数据而没有正确的名称并添加一些优势(否则,您最终将只有一名参议员多次与他或她自己联系)

set.seed(1)
m <- matrix(0, nrow = 6, ncol = 4)
colnames(m) <- letters[1:4]
rownames(m) <- 1:6
m[] <- sample(0:2, 24, replace = T, prob = c(.5,.3,.2))

使用igraph方法,您可以使用函数graph_from_incidence_matrix,该函数将产生两个模式的参议员和钞票作为顶点的图形:

g <- graph_from_incidence_matrix(m, directed = F, multiple = T)

,然后将图形转换为单模投影,该模型仅包含通过他们共享的账单相连的参议员:

g_sponsors <- bipartite.projection(g, multiplicity = T)[[2]]

另一种较少占用类型的方法是将base R用于矩阵转换,然后将其作为邻接矩阵读入:

m_sponsors <- t(m) %*% m
g_sponsors <- graph_from_adjacency_matrix(m_sponsors, weighted = T)

我希望这会有所帮助!