我本人从数据帧创建的曲线图,在形式from, to, cost
列。 我也有一个路径(作为顶点的继承,在vpath
格式igraph
),这是有效的(我的图指向)。
有没有,给我的图表和我的道路,会给我该路径的任何成本函数?
我不要求最短路径,因为我得到从路径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))])