R语言igraph包获取多OD对最短路径并生成分步路径表的方法
问题解决说明
你之前直接向all_simple_paths传入多组起点、终点参数,函数会返回所有起点到所有终点的全组合路径,而非逐行对应的OD对路径,不符合需求。你需要逐行匹配OD对计算最短路径,再拆分路径段、匹配对应km值即可实现目标结果。
完整可运行代码
library(igraph) # 构造网络 network <- graph_from_literal(1--2,2--3,3--4,4--5,3--6,6--7,3--8,8--9) # 构造OD数据 od_data <- data.frame(Origin=c(1,8,9,2), Destination=c(4,5,6,9), km=c(22,32,43,52)) # 逐行计算每个OD对的最短路径,同时处理为目标格式 result <- do.call(rbind, lapply(1:nrow(od_data), function(i){ # 取当前行OD和对应km值 o <- as.character(od_data$Origin[i]) d <- as.character(od_data$Destination[i]) km_val <- od_data$km[i] # 计算当前OD对的最短路径顶点序列 path <- as.numeric(shortest_paths(network, from = o, to = d, output = "vpath")$vpath[[1]]) # 拆分路径为O-D段,末尾D补- data.frame( O = path, D = c(path[-1], "-"), Km = km_val ) })) # 查看结果 print(result, row.names = FALSE)
输出结果
O D Km 1 2 22 2 3 22 3 4 22 4 - 22 8 3 32 3 4 32 4 5 32 5 - 32 9 8 43 8 3 43 3 6 43 6 - 43 2 3 52 3 8 52 8 9 52 9 - 52
内容的提问来源于stack exchange,提问作者Tanya Valkanova
相关产品推荐
相关产品推荐

