我使用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的所有节点,我想添加另一个具有这些节点的组,这样我就可以在不同的组中对所有原始节点进行分类。
发布于 2018-08-10 00:53:19
在你的例子中,我认为你只是想让另一个连通组件中的顶点成为另一个社区,把第二个组件中的所有节点分配给第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 2https://stackoverflow.com/questions/51776999
复制相似问题