[英]R igraph: Finding shortest path in igraph, adding weight to it and search for alternative
[英]Obtain weight of a path with iGraph in R
我有一個從數據框創建的圖表,形式為from, to, cost
列。 我也有一個有效的路徑(作為一系列頂點,以igraph
的vpath
格式)(我的圖形是定向的)。
給定我的圖形和路徑,是否有任何函數會給我該路徑的成本?
我不是在問最短的路徑,因為我是從all_shortest_paths
獲得路徑的。 但是,我只獲得節點繼承,而沒有獲得路徑的權重,這也是我所需要的。
編輯:數據
這是我的數據框,我將其變成圖表: http : //www.sharecsv.com/s/47209742f0052a37e17db37ea3af63ac/arcsWithCost.csv
我的路徑是15 4 50 212 183 112 114 37 228 119
您具有作為頂點序列的路徑。 如果您有邊緣的順序,這將很容易-只需將每個邊緣的權重相加即可。 因此,您需要做的是將頂點序列轉換為邊線序列。 盡管您需要將數據轉換為正確的格式,但這就是get.edge.ids
所做的。
由於您沒有提供任何數據,因此我將舉一個隨機的例子進行說明。
library(igraph)
set.seed(1234)
g = erdos.renyi.game(10,0.15, directed=TRUE)
E(g)$weight = sample(5, length(E(g)), replace=TRUE)
plot(g)
好的,現在假設我們要對節點1-4-10-3沿路徑的權重求和。 我假設您有一個列表c(1,4,10,3)
VP = c(1,4,10,3)
EP = rep(VP, each=2)[-1]
EP = EP[-length(EP)]
E(g)$weight[get.edge.ids(g, EP)]
[1] 1 5 4
sum(E(g)$weight[get.edge.ids(g, EP)])
[1] 10
在添加到問題的數據中,有110個節點,但它們的編號最多為281。這些數字是節點的標簽,而不是節點ID。 您可以使用標簽來訪問節點,但是必須將它們轉換為字符串,才能將它們視為標簽。 此代碼適用於您的示例。
VP = c(15, 4, 50, 212, 183, 112, 114, 37, 228, 119)
EP = rep(VP, each=2)[-1]
EP = EP[-length(EP)]
E(g)$cost[get.edge.ids(g, as.character(EP))]
sum(E(g)$cost[get.edge.ids(g, as.character(EP))])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.