Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R igraph convert parallel edges to weight attribute

I'm working with igraph for R. My graph is based on an edgelist which includes parallel edges (more than one edge with the same source and target). I would like to convert these parallel edges to an edge attribute weight. Is there an eay way to do this?

If there is no easy way. how can I identify these parallel edges?

    duplicated(E(net))

does not return a single duplicate. I suppose its looking for duplicated edge ids.

like image 847
supersambo Avatar asked Oct 21 '12 13:10

supersambo


3 Answers

You can also use E(graph)$weight <- 1 followed by simplify(graph, edge.attr.comb=list(weight="sum")) to assign a weight of 1 to each edge and then collapsing multiple edges into single ones while summing the weights.

like image 149
Tamás Avatar answered Nov 21 '22 05:11

Tamás


It seems exporting an unweighted graph with parallel edges to an adjacency matrix in igraph creates a weights list with the number of edges as weight, which can then be read again:

library("igraph")
E <- matrix(c(1,1,1,2,2,2),3,2)
G <- graph.edgelist(E)

G2 <- graph.adjacency(get.adjacency(G),weighted=TRUE)
like image 35
Sacha Epskamp Avatar answered Nov 21 '22 06:11

Sacha Epskamp


In case you want to get the number of parallel edges of a graph without adding a weight attribute to your graph, you could use the following function:

duplicated <- function(graph){
  g_local <- graph
  E(g_local)$weight <- 1
  g_simp <- simplify(g_local, edge.attr.comb=list(weight="sum"))
  w <- E(g_simp)$weight
  return(sum(w-1))
}
like image 33
Gonzalo user7334982 Avatar answered Nov 21 '22 05:11

Gonzalo user7334982