首页 > 解决方案 > 从 igraph 中的特定集群中检索节点和边列表

问题描述

假设我在图中有以下集群:

library("igraph")
set.seed(3)
g <- barabasi.game(20, m=2, directed=FALSE)
eb <- cluster_edge_betweenness(g)
plot(eb, g, layout=layout_with_fr) 

是否可以检索包含数字 5 的集群的节点和相应边的列表或数据框?如果一个节点存在于多个集群中,例如 8 个或 14 个,该怎么办?

谢谢!

标签: rdataframeigraph

解决方案


我不知道任何可以自动执行此操作的方法。但是,您可以轻松地手动完成。

我不确定您所说的“存在于多个集群中”是什么意思。从图中节点的颜色和中介聚类的输出可以看出,集群成员是互斥的。有6组:

print(eb)
IGRAPH clustering edge betweenness, groups: 6, mod: 0.26
+ groups:
  $`1`
  [1]  1  2  3 14 15

  $`2`
  [1]  4  5  6 10 19

  $`3`
  [1]  7 11 16

  $`4`
  + ... omitted several groups/vertices

eb$membership
[1] 1 1 1 2 2 2 3 4 5 2 3 4 6 1 1 3 4 4 2 4

# extract all edges of the graph
d <- igraph::as_data_frame(g, what="edges")

# get membership of interested node
memb <- eb$membership[V(g)==5]
memb
[1] 2

# get all nodes with the same membership
memb_nodes <- V(g)[eb$membership==memb]
memb_nodes
+ 5/20 vertices, from 293a69d:
[1]  4  5  6 10 19

# subset
d <- d[d$from %in% memb_nodes & d$to %in% memb_nodes, ]
d
   from to
9     4  6
16    4 10
17    5 10
34    4 19
35    5 19

在此处输入图像描述


推荐阅读