Jochem
Jochem

Reputation: 3396

Find total of second variable related to the distance of route from get.shortest.paths()

I found the following question ( Find distance of route from get.shortest.paths() ) very helpful, but would like to take it one step further. I have added one column to the data frame and I would like to get the "total distance" related to the min newcost path.

Below the igraph / R code that I used.

df2 = rbind(c(234,235,21.6,75),
c(234,326,11.0,35),
c(235,241,14.5,78),
c(326,241,8.2,98),
c(241,245,15.3,75),
c(234,245,38.46,65))

df2 = as.data.frame(df2)
names(df2) = c("start_id","end_id","newcost","distance")

df2

require(igraph)
g2 <- graph.data.frame(df2, directed=FALSE)

tkplot(g2)

(tmp2 = get.shortest.paths(g2, from='234', to='245',weights=E(g2)$newcost))

# This gives the shortest path based on $newcost
V(g2)[tmp2[[1]]]

The question that I would like to have answered is what is the distance related to this shortest path. The answer of the shortest path is 34.5 and (computed manually) the distance related to this path is 208.

Appreciate some hints on how to get this distance automatically.

Thanks! Jochem

# What is the distance related to the min newcost?

Upvotes: 1

Views: 336

Answers (1)

flodel
flodel

Reputation: 89097

This gives you the edges along your optimal path:

optimal.path <- V(g2)[tmp2[[1]]] 
E(g2, path = optimal.path)
# Edge sequence:
#               
# [1] 326 -- 234
# [3] 241 -- 326
# [4] 245 -- 241

(note that they do not appear in the order along your optimal path, but as they appear in the definition of your graph g2.)

and this gives you the total distance:

sum(E(g2, path = optimal.path)$distance)
# [1] 208

Upvotes: 1

Related Questions