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

时间:2012-10-21 13:56:17

标签: r igraph edges weighted-graph

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

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

    duplicated(E(net))

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

3 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:4)

似乎将带有平行边缘的未加权图形导出到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)

答案 2 :(得分:0)

如果您想在不向图表添加权重属性的情况下获取图表的平行边数,可以使用以下函数:

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))
}