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