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

R 将社区检测与连接组件分组相结合,r,igraph,R,Igraph,我使用igraphcluster_spingglass来检测定向网络中的隔间(社区),但这只适用于连接的组件 g <- graph_from_literal( 1 -+ 4 -+ 7,2 -+ 5 -+ 9, 4+-5, 3 -+ 6,5 -+8, 8-+ 9, simplify = FALSE) m<-cluster_spinglass(g) 但是这里我没有原始网络的所有节点,我想用这些节点添加另一个组,以便将所有原始节点分类到不

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

g <-   graph_from_literal( 1 -+ 4 -+ 7,2 -+ 5 -+ 9, 4+-5,
                       3 -+ 6,5 -+8, 8-+ 9, simplify = FALSE)
m<-cluster_spinglass(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
V(g)$membership=0
用于(唯一公司(dg$会员)){

g1如果网络未命名,则此操作无效,因此我添加了
如果(!is.named(g))V(g)$name是否有人可以查看我的问题?谢谢
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