r - 在 R 中使用 iGraph 获取路径的权重

标签 r igraph directed-graph

我有一个从数据框创建的图表,格式为 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)

Graph

好的,现在假设我们要对节点 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))])

关于r - 在 R 中使用 iGraph 获取路径的权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49695445/

相关文章:

r - 使用 R 正则表达式提取所有符合条件的子字符串

r - 在R中绘制图形时如何增加边的长度

drawing - 点有向图是否允许具有不同 rankdir 的子图?

python - 获取有向图中的并行路径列表

algorithm - 如何在有向加权图中将一条边恰好设置为零以找到最短路径?

r - 通过管道连接和 vroom 进行预过滤

r - 绘制具有分级 alpha(透明度)级别的置信区域阴影

r - 为什么 POSIXct 中的秒单位是 0-61

r - 图 R |如何为每个节点添加第二个内圈?

installation - 在 Windows 上为 python 3.6 安装 python-igraph