簡體   English   中英

在R中使用iGraph獲得路徑的權重

[英]Obtain weight of a path with iGraph in R

我有一個從數據框創建的圖表,形式為from, to, cost列。 我也有一個有效的路徑(作為一系列頂點,以igraphvpath格式)(我的圖形是定向的)。

給定我的圖形和路徑,是否有任何函數會給我該路徑的成本?

我不是在問最短的路徑,因為我是從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM