首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将社区检测与连通组件分组igraph相结合

将社区检测与连通组件分组igraph相结合
EN

Stack Overflow用户
提问于 2018-08-09 23:23:35
回答 1查看 170关注 0票数 2

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

代码语言:javascript
运行
复制
g <-   graph_from_literal( 1 -+ 4 -+ 7,2 -+ 5 -+ 9, 4+-5,
                       3 -+ 6,5 -+8, 8-+ 9, simplify = FALSE)
m<-cluster_spinglass(g)

如果出现错误,则解决方案是提取连接的组件。

代码语言:javascript
运行
复制
dg <- components(g)
g1 <- induced_subgraph(g, which(dg$membership == which.max(dg$csize))) 
m<-cluster_spinglass(g1)

我获得节点(顶点)的成员资格

代码语言:javascript
运行
复制
m$membership

但是这里我没有原始网络g的所有节点,我想添加另一个具有这些节点的组,这样我就可以在不同的组中对所有原始节点进行分类。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-10 00:53:19

在你的例子中,我认为你只是想让另一个连通组件中的顶点成为另一个社区,把第二个组件中的所有节点分配给第3组就足够了。

代码语言:javascript
运行
复制
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

但在一个更一般的例子中,可能有多个组件,这些组件可能分解成多个社区。为了解决这个问题,您可以遍历所有组件,计算社区,然后将它们传输回原始图。

代码语言:javascript
运行
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51776999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档