我使用 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/