首页 > 解决方案 > 使用 igraph 查找距离矩阵

问题描述

我有一个如下连接的网络:

library(igraph)
network <- graph_from_literal(1--2,2--3,3--4,4--5,3--6,6--7,3--8,8--9)

并有每个段之间的距离

> data=data.frame(Origin=c(1,2,3,4,3,6,3,8), Destination=c(2,3,4,5,6,7,8,9), km=c(0.3,0.5,0.2,0.1,1,2,0.6,0.4))
> data
  Origin Destination  km
      1           2 0.3
      2           3 0.5
      3           4 0.2
      4           5 0.1
      3           6 1.0
      6           7 2.0
      3           8 0.6
      8           9 0.4

我想找到所有点之间的距离矩阵,我尝试使用

distMatrix <- shortest.paths(data, v=Origin(data), to=Destination(data))

但不能让它工作。

谢谢!

标签: rigraph

解决方案


distances()函数将为您提供一个距离矩阵。通过设置边缘权重,距离矩阵将在计算中包含这些权重。在下面的代码中,我从您的数据集创建图形data,以便正确排序边缘:

library("igraph")
data = data.frame(Origin=c(1,2,3,4,3,6,3,8), Destination=c(2,3,4,5,6,7,8,9), 
  km=c(0.3,0.5,0.2,0.1,1,2,0.6,0.4))

g = graph_from_edgelist(cbind(data$Origin, data$Destination))
E(g)
#> + 8/8 edges from 7ad6d28:
#> [1] 1->2 2->3 3->4 4->5 3->6 6->7 3->8 8->9
E(g)$weight = data$km

distances(g)
#>       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
#>  [1,]  0.0  0.3  0.8  1.0  1.1  1.8  3.8  1.4  1.8
#>  [2,]  0.3  0.0  0.5  0.7  0.8  1.5  3.5  1.1  1.5
#>  [3,]  0.8  0.5  0.0  0.2  0.3  1.0  3.0  0.6  1.0
#>  [4,]  1.0  0.7  0.2  0.0  0.1  1.2  3.2  0.8  1.2
#>  [5,]  1.1  0.8  0.3  0.1  0.0  1.3  3.3  0.9  1.3
#>  [6,]  1.8  1.5  1.0  1.2  1.3  0.0  2.0  1.6  2.0
#>  [7,]  3.8  3.5  3.0  3.2  3.3  2.0  0.0  3.6  4.0
#>  [8,]  1.4  1.1  0.6  0.8  0.9  1.6  3.6  0.0  0.4
#>  [9,]  1.8  1.5  1.0  1.2  1.3  2.0  4.0  0.4  0.0

reprex 包于 2021-09-06 创建(v2.0.1)


推荐阅读