【问题标题】:Combine community detection with connected components grouping igraph R将社区检测与连接组件分组 igraph R 相结合
【发布时间】:2018-08-09 23:23:35
【问题描述】:

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

【问题讨论】:

    标签: r igraph


    【解决方案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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多