我正在尝试将社交网络分析应用于国会的投票习惯,并且在建立自己的网络方面遇到困难。我有一个由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
答案 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)
我希望这会有所帮助!