2017-03-16 11 views
1

Ich habe eine Grafik, G = (V, E) mit mehreren Attributen einschließlich einer Kante Gewicht Attribut. Ich versuche, einen Teilgraphen basierend auf einer Bedingung zu erstellen, bei der die Gewichte höher als x sind.Subset Graph basierend auf Kanten Gewicht

Ich habe die Standard-R-Teiloption mit g <- E(g)[weight > max(weight)*.10] ausprobiert, aber ich bekomme immer einen Vektor. Ich bin mir nicht sicher, was ich hier falsch mache.

Antwort

5

Vielleicht wollen Sie so etwas wie dieses

library(igraph) 
set.seed(1) 
m <- matrix(sample(c(.5, 2, 5), 100, replace=T, prob = c(.6,.3,.1)), nc=10, dimnames = rep(list(letters[1:10]), 2)) 
g <- graph_from_adjacency_matrix(m, weighted=T, diag=F, mode="undirected") 
coords <- layout.auto(g) 
par(mfrow = c(1,3)) 

plot(g, layout=coords, edge.width = E(g)$weight) 

s1 <- subgraph.edges(g, E(g)[E(g)$weight>2], del=F) 
plot(s1, layout=coords, edge.width = E(s1)$weight) 

s2 <- delete_vertices(s1, degree(s1, mode = "in")==0) 
plot(s2, layout=coords[V(g)$name%in%V(s2)$name,], edge.width = E(s2)$weight) 

enter image description here

+0

Ich habe keine Flow-Matrix, aber Ihr Code tatsächlich beantwortet meine Frage. Ich habe die Funktion subgraph.edges nicht benutzt und definitiv auch nicht delete_vertices. Danke. – FilipeTeixeira

0

das sein würde, weil Sie Ihre Graphen g mit nur subsetted Kanten ersetzt. Wenn Sie Kanten unter dem Schwellenwert Gewicht entfernen möchten, können Sie verwenden:

g_sub <- delete.edges(g, E(g)[weight <= max(weight)*.10]) 
Verwandte Themen