2012-10-21 56 views
12

我正在使用igraph for R.我的圖基於包含平行邊的邊界列表(多個邊具有相同的源和目標)。我想將這些平行邊緣轉換爲邊緣屬性權重。有沒有一種方法可以做到這一點?R igraph將平行邊轉換爲重量屬性

如果沒有簡單的方法。我如何識別這些平行邊緣?

duplicated(E(net)) 

不返回單個重複。我想它尋找重複的邊緣ID。

回答

21

也可以使用E(graph)$weight <- 1然後是simplify(graph, edge.attr.comb=list(weight="sum")),爲每個邊緣分配權重1,然後在疊加權重時將多個邊緣摺疊爲單個邊緣。

+2

這個解決方案實際上要好得多,因爲它使用線性空間和時間,而鄰接矩陣解決方案使用二次(以頂點數量)空間和時間。 –

+1

順便說一句。這也消除了循環邊緣,所以如果你不想這樣做,可以使用'remove.loops = FALSE'參數來簡化()'。 –

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) 
+0

這是非常大圖一個真正有用的解決方案。 – timothyjgraham

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