Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Subset igraph graph by label

Tags:

r

igraph

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"]
like image 540
Michael Davidson Avatar asked Apr 07 '13 00:04

Michael Davidson


2 Answers

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

like image 52
Solomon Avatar answered Nov 05 '22 09:11

Solomon


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.

like image 19
Gabor Csardi Avatar answered Nov 05 '22 09:11

Gabor Csardi