从igraph中的特定簇中检索节点和边的列表

问题描述 投票:1回答:1

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

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)中的节点怎么办?

谢谢!

r dataframe igraph
1个回答
0
投票

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

我不确定“在多个群集中存在”是什么意思。从图中节点的颜色以及中间性聚类的输出可以看出,聚类成员资格是互斥的。有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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.