我有一张进/出港航班和旅行时间的表格。我需要确定飞行网络是否“完全连接”,这意味着您可以以某种方式从每个城市到达每个其他城市。乘坐多少次航班(无论是直接航班还是多次航班)都没有关系。
共有约58个飞行位置,约438个不同的组合(不确定是否重要)。这是数据示例:
╔═════════╦══════════╦═════════╗
║ Inbound ║ Outbound ║ Minutes ║
╠═════════╬══════════╬═════════╣
║ ACY ║ ATL ║ 102 ║
╠═════════╬══════════╬═════════╣
║ ACY ║ FLL ║ 136 ║
╠═════════╬══════════╬═════════╣
║ ACY ║ MCO ║ 122 ║
╠═════════╬══════════╬═════════╣
║ ACY ║ MYR ║ 90 ║
╠═════════╬══════════╬═════════╣
║ ACY ║ RSW ║ 137 ║
╠═════════╬══════════╬═════════╣
║ ACY ║ TPA ║ 129 ║
╠═════════╬══════════╬═════════╣
║ ATL ║ ACY ║ 102 ║
╠═════════╬══════════╬═════════╣
║ ATL ║ BOS ║ 132 ║
╚═════════╩══════════╩═════════╝
这是我到目前为止设置的:
data <- read.table(file="filename.txt", header=TRUE, sep = "\t")
colnames(data) <- c("Inbound", "Outbound", "Minutes")
# Make a directed igraph object from inbound/outbound columns
graph <- graph_from_data_frame(data[, c("Inbound", "Outbound")], directed=TRUE,vertices=NULL)
# Make an edgelist from the igraph object
edgelist <- as_edgelist(graph, names=T)
# Make network object from edgelist
network <- as.network(edgelist)
# Use Minutes as weight for edges
E(graph)$weight <- data$Minutes
然后(我认为),我的代码可以正确获取从每个城市到每个其他城市的最短路径:
shortestPaths <- do.call(c, lapply(V(graph), function(v) get.shortest.paths(graph,v,V(graph), weights=weights, output='epath')$epath))
但是我如何找到仅靠航班无法到达的成对机场?(因为,没有直接/中转航班可以将它们连接起来)
编辑 因此,我取得了一些进步,但这并不是我所需要的100%。
使用此代码,我可以获得每条路径(从一个城市到另一个城市)的总时间:
shortestPathsTimes <- do.call(c, lapply(V(graph),
function(v) shortest.paths(graph,v,V(graph),
weights=weights)))
我添加了几条没有任何共享入站/出站的伪造行。我发现,只要未连接路径,以上代码都会返回“ inf”。所以用这个:
noPath <- shortestPathsTimes[which(is.infinite(shortestPathsTimes))]
返回这样的输出(基本上每个位置都有2个Inf,我创建的2个伪位置中的每个都有一个)。
+===============================================================================+
| ACY59 ACY60 ATL59 ATL60 AUA59 AUA60 AXM59 AXM60 BDL59 BDL60 BOG59 BOG60 |
+===============================================================================+
| Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf |
+-------------------------------------------------------------------------------+
但是,我需要的是显示的实际文本路径,例如get.shortest.paths
的输出方式。因此,例如,我需要它仅返回类似ACY => TESTIN,ACY => TESTOUT,ATL => TESTIN,ATL => TESTOUT之类的内容。