在R中如何从igraph中删除小社区



在 R 网络图中如何删除两个小社区(两个节点与一条边连接,与其他节点没有连接,如本例中的 Jane 和 Ike:

library(igraph)
g <- graph_from_literal(Andre----Beverly:Diane:Fernando
                    Beverly--Garth:Ed,
                    Carol----Andre:Diane:Fernando,
                    Diane----Andre:Carol:Fernando:Beverly,
                    Fernando-Carol:Andre:Diane:Heather,
                    Jane-----Ike )
plot(g, vertex.label.color="blue", vertex.label.cex=1.5,
 vertex.label.font=2, vertex.size=25, vertex.color="white",
 vertex.frame.color="white", edge.color="black")

这是一个可能的解决方案,使用 components 来查找子图,然后进行一些计数。 您还可以查看igraph(如 groupssizes(中的函数,以执行获取子图顶点计数和顶点名称的这些操作。

library(igraph)
g <- graph_from_literal(Andre----Beverly:Diane:Fernando,
                        Beverly--Garth:Ed,
                        Carol----Andre:Diane:Fernando,
                        Diane----Andre:Carol:Fernando:Beverly,
                        Fernando-Carol:Andre:Diane:Heather,
                        Jane-----Ike )
#get all subgraphs
sub_gs <- components(g)$membership
#find which subgraphs have 2 nodes
small_sub <- names(which(table(sub_gs) == 2))
#get names of nodes to rm
(rm_nodes <- names(which(sub_gs == small_sub)))
# [1] "Jane" "Ike" 
#remove nodes by name
g2 <- delete_vertices(g, rm_nodes)

我们可以使用如下所示的 induced_subgraph + membership 来过滤掉小尺寸(例如大小 2 甚至更小(的集群

induced_subgraph(
  g,
  V(g)[ave(1:vcount(g), membership(components(g)), FUN = length) > 2]
)

最新更新