r - 将社区检测与连接组件分组 igraph R 相结合

标签 r igraph

我使用 igraph cluster_spinglass 来检测定向网络中的隔间(社区),但这仅适用于连接的组件

g <-   graph_from_literal( 1 -+ 4 -+ 7,2 -+ 5 -+ 9, 4+-5,
                       3 -+ 6,5 -+8, 8-+ 9, simplify = FALSE)
m<-cluster_spinglass(g)

报错,解决办法是提取连通分量

dg <- components(g)
g1 <- induced_subgraph(g, which(dg$membership == which.max(dg$csize))) 
m<-cluster_spinglass(g1)

我使用

获取节点(顶点)的成员资格
m$membership

但是这里我没有原始网络g的所有节点,我想添加另一个包含这些节点的组,这样我就可以将所有原始节点分类在不同的组中。

最佳答案

您可以将其转移到您的原始图表 g 中。 在你的例子中,我认为你只想要 如果其他连通组件是另一个社区,则只需将第二个组件中的所有节点分配到组 3 即可。

V(g)$membership = 3
V(g)[V(g1)$name]$membership = m$membership
V(g)$membership
[1] 1 1 1 2 2 2 3 3 2

但在更一般的示例中,可能有多个组件,并且这些组件可能会分解为多个社区。 为了解决这个问题,您可以循环遍历所有组件,计算社区,然后将其传输回原始图表。

V(g)$membership = 0
for(comp in unique(dg$membership)) {
    g1 <- induced_subgraph(g, which(dg$membership == comp))
    m<-cluster_spinglass(g1)
    V(g)[V(g1)$name]$membership = m$membership + max(V(g)$membership)
}
V(g)$membership
[1] 1 1 1 2 2 2 3 3 2

关于r - 将社区检测与连接组件分组 igraph R 相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51776999/

相关文章:

递归引用数据帧

r - 将 11 GB .csv 文件加载为 big.matrix 对象

r bin 等于十分位数

r - igraph 解决具有不同节点大小 r 的重叠节点

igraph - 使用 iGraph 的哈密顿路径

python - 有向树(igraph)中从一个节点到另一个节点的所有可能路径

python - igraph python 删除边框

如果使用覆盖文本,R ggplot2 geom_smooth 线不会显示

r - igraph中的子组件失败(实验2的后半部分)

r - 如何在变异后将 t.test() 应用于多对列