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

时间:2018-08-09 23:23:36

标签: 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的所有节点,我想添加一个包含这些节点的组,以便将所有原始节点分类为不同的组。

1 个答案:

答案 0 :(得分:1)

您可以将其转移到原始图形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