R igraph将平行边缘转换为权重属性

sup*_*mbo 12 r edges igraph weighted-graph

我正在使用igraph for R.我的图表基于一个包含平行边缘的边缘列表(多个边缘具有相同的源和目标).我想将这些平行边缘转换为边缘属性权重.有没有一种方法可以做到这一点?

如果没有简单的方法.如何识别这些平行边缘?

    duplicated(E(net))
Run Code Online (Sandbox Code Playgroud)

不会返回单个副本.我想它正在寻找重复的边缘ID.

Tam*_*más 24

您还可以使用E(graph)$weight <- 1后跟simplify(graph, edge.attr.comb=list(weight="sum"))为每个边指定权重1,然后将多个边折叠为单个边,同时对权重求和.

  • 这个解决方案实际上要好得多,因为它使用线性空间和时间,而邻接矩阵解决方案使用二次(就顶点数量而言)空间和时间. (4认同)
  • 顺便说一句.这也消除了循环边缘,所以如果你不想这样,请使用`simplify()`的`remove.loops = FALSE`参数. (2认同)

Sac*_*amp 5

似乎将具有平行边的未加权图导出到邻接矩阵,igraph创建一个以边数作为权重的权重列表,然后可以再次读取该权重列表:

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)
Run Code Online (Sandbox Code Playgroud)