2017-06-11 1 views
0

dans le graphique de réseau R comment retirer petite communauté de deux par deux (deux noeuds reliés à un bord et aucune connexion avec d'autres noeuds, comme Jane et ike dans cet exemple:Dans R comment retirer petite communauté de igraph

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") 

Répondre

3

est ici une solution possible en utilisant components pour trouver des sous-graphes et puis en faisant un certain comptage. Vous pouvez aussi regarder dans les fonctions de igraph telles que groups et sizes pour effectuer ces opérations de obtenir nombre de vertex de sous-graphes et les sommets.

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)