首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取社区节点和其他节点之间的边缘

提取社区节点和其他节点之间的边缘
EN

Stack Overflow用户
提问于 2016-10-21 16:16:54
回答 1查看 465关注 0票数 1

假设我们有一个简单的加权网络,在其上执行某种社区检测。接下来,我们提取特定的社区,最后的任务是提取该社区的所有节点与所有其他节点之间的所有边缘。

下面我粘贴了玩具代码。

代码语言:javascript
复制
# Create toy graph
library(igraph)
set.seed(12345)
g <- make_graph("Zachary")
# Add weights to edges
E(g)$weight <- sample(x = 1:10, size = ecount(g), replace = TRUE)
# Run community detection
cl <- cluster_louvain(g)

共有5个节点属于社区#1,12个节点属于社区#2等。

代码语言:javascript
复制
> table(membership(cl))
 1  2  3  4 
 5 12  2 15

现在我们提取社区#1

代码语言:javascript
复制
g1 <- induced_subgraph(g, which(cl$membership == 1))

问题:如何找到将社区#1中的节点与所有其他节点连接起来的边(不包括定义社区#1的边)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-21 16:56:37

从获取社区中的所有边缘开始:

代码语言:javascript
复制
all_edges <- E(g)[inc(V(g)[membership(cl) == 1])]
all_edges
+ 10/78 edges:
 [1] 1-- 5 1-- 6 1-- 7 1--11 5-- 7 5--11 6-- 7 6--11 6--17 7--17

然后,过滤掉完全是内部的(两个顶点都在社区中):

代码语言:javascript
复制
all_edges_m <- get.edges(g, all_edges) #matrix representation

all_edges[!(
 all_edges_m[, 1] %in% V(g)[membership(cl) == 1] & 
   all_edges_m[, 2] %in% V(g)[membership(cl) == 1]
 )] # filter where in col1 and col2
+ 4/78 edges:
[1] 1-- 5 1-- 6 1-- 7 1--11
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40181263

复制
相关文章

相似问题

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