2017-08-28 1 views
0

J'ai un graphe biparti et une trame de données avec chaque rangée associée à chaque sommet du premier côté du graphe. Le graphique n'est pas connecté et quand je trouve le plus grand composant du graphique, je dois sous-estimer le cadre de données (ce qui ne me donne pas la bonne réponse). Une autre option possible est de définir les lignes de la trame de données comme l'attribut des sommets du premier côté du graphique (dont je ne sais pas comment le faire)! Voici un exemple de jouet:Définition d'un attribut vectoriel pour les sommets d'un mode d'un graphe biparti

edgelist = matrix(c("A","a","A","b","B","b","C","c","D","c"),ncol=2,byrow=T) 
bg <- graph.data.frame(edgelist, directed=F) 
V(bg)$type <- V(bg)$name %in% edgelist[,1] 
summary(bg) 
V(bg)[V(bg)$type==1] 
df = data.frame(id=c("A","B","C","D"), x=runif(4,10,50), y=sample(4), z=rnorm(4)) 

gclust = clusters(bg) 
numClust = gclust$no 
numLCC = gclust$csize[1] 
bg2 = induced.subgraph(bg, which(gclust$membership ==which.max(gclust$csize))) 
remained_set1 <- V(bg2)[V(bg2)$type==1] 

df[as.character(df[,1])%in%remained_set1,] # wrong answer 

Répondre

0

Essayez d'utiliser les noms des sommets et retournement de la %in%

subset(df, id %in% names(remained_set1)) 

Cela renvoie les lignes de A et B dans votre exemple.

+0

Je reçois la même chose. c'est-à-dire [1] id x y z <0 rows> (ou 0 longueur row.names) – mathlover

+0

Vraiment? Vous avez copié et collé en utilisant les données d'exemple ci-dessus? Quelle version d'igraph vous utilisez? Cela a été testé avec 'igraph_1.1.2'. – MrFlick

+0

Oui, le mien est igraph_0.7.1. Je suppose que mon igraph est foiré. Je pourrais avoir besoin de mettre à jour mon R puisque lorsque j'installe igraph, cette version est installée. J'ai posé cette question hier https://stackoverflow.com/questions/45892699/r-igraph-graph-from-incidence-matrix-and-graph-from-adjacency-matrix-dont?noredirect=1#comment78760630_45892699 – mathlover