2017-08-28 3 views
0

Ich habe einen zweiteiligen Graphen und einen Datenrahmen, wobei jede Reihe mit jedem Scheitelpunkt der ersten Seite des Graphen verknüpft ist. Der Graph ist nicht verbunden, und wenn ich die größte Komponente des Graphen finde, muss ich den Datenrahmen unterteilen (was mir nicht die richtige Antwort gibt). Eine andere mögliche Option besteht darin, die Zeilen des Datenrahmens als das Attribut der Scheitelpunkte der ersten Seite des Graphen zu setzen (was ich nicht weiß, wie es geht)! Hier ist ein Spielzeug Beispiel:Setzen eines Vektorattributs für Scheitelpunkte eines Modus eines bipartiten Graphen

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 

Antwort

0

Versuchen Sie, die Namen der Eckpunkte verwendet und die %in%

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

in Ihrem Beispiel Dies gibt die Zeilen für A- und B-Spiegeln.

+0

Ich bekomme das Gleiche. h. [1] id x y z (oder 0-length row.names) – mathlover

+0

Wirklich? Sie haben kopiert und eingefügt mit den obigen Beispieldaten? Welche Version von igigraph benutzt du? Dies wurde mit 'igraph_1.1.2' getestet. – MrFlick

+0

Ja, meine ist iigraph_0.7.1. Ich schätze, mein Igraph ist durcheinander. Möglicherweise muss ich mein R aktualisieren, da ich diese Version installiert habe, wenn ich igraph installiere. Ich fragte diese Frage gestern https://stackoverflow.com/questions/45892699/r-igraph-graph-from-incidence-matrix-and-graph-from-adjacency-matrix-dont?noredirect=1#comment78760630_45892699 – mathlover

Verwandte Themen