如何在 R 中使用 igraph 删除小社区?

Ali*_*vis 6 networking module r igraph

igraph从我的数据集“allgenes”创建了我的,并找到了基于 louvain 方法的社区模块。

gD <- igraph::simplify(igraph::graph.data.frame(allgenes, directed=FALSE))
lou <- cluster_louvain(gD)
Run Code Online (Sandbox Code Playgroud)

在绘制模块时,我注意到有几个我希望删除的小社区。我将如何删除包含 5 个或更少节点的社区?

plot(lou, gD, vertex.label = NA, vertex.size=5, edge.arrow.size = .2)
Run Code Online (Sandbox Code Playgroud)

具有不同模块的绘图:

图片

G5W*_*G5W 5

由于您没有提供示例,我将用随机生成的数据进行说明。

## First create an example like yours
library(igraph)
set.seed(123)
gD = erdos.renyi.game(50,0.05)
lou <- cluster_louvain(gD)
LO = layout_with_fr(gD)
plot(lou, gD, vertex.label = NA, vertex.size=5, 
    edge.arrow.size = .2, layout=LO)
Run Code Online (Sandbox Code Playgroud)

G1

## identify which communities have fewer than 5 members
Small = which(table(lou$membership) < 5)

## Which nodes should be kept?
Keep = V(gD)[!(lou$membership %in% Small)]

## Get subgraph & plot
gD2  = induced_subgraph(gD, Keep)
lou2 = cluster_louvain(gD2)
LO2 = LO[Keep,]
plot(lou2, gD2, vertex.label = NA, vertex.size=5, 
    edge.arrow.size = .2, layout=LO2)
Run Code Online (Sandbox Code Playgroud)

G2

小社区已被移除