I am trying to subset a igraph graph by an edge characteristics (like its label). In the reproducible example I have shamelessly stolen from another post with a little modification, I would like to be able to separate the Best Friend ties (BF) from the Family ties (FAM):
edges <- matrix(c(103, 86, 24, 103, 103, 2, 92, 103, 87, 103, 103, 101, 103, 44), ncol=2, byrow=T)
g <- graph(as.vector(t(edges)))
E(g)[c(2:4,7)]$label<-"FAM"
E(g)[c(1,5,6)]$label<-"BF"
The best I can do so far is display the edges which have one type of tie:
E(g)[E(g)$label=="BF"]
V(g)[E(g)$label=="BF"]
how about:
gfam <- subgraph.edges(graph=g, eids=which(E(g)$label=="FAM"), delete.vertices = TRUE)
gbf <- subgraph.edges(graph=g, eids=which(E(g)$label=="BF"), delete.vertices = TRUE)
Suggestion for igraph/network analysis tutorial/shameless plug: http://sna.stanford.edu/rlabs.php
I suggest you read ?V
and ?E
to see how to select edges and vertices. A quite compact and readable solution to your question is
subgraph.edges(g, E(g)[label=="FAM"])
subgraph.edges(g, E(g)[label=="BF"])
This removes the vertices as well, if they don't have an incident edge of the specified label. See ?subgraph.edges
for details.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With