使用igraph寻找距离矩阵

3

我有一个网络,连接方式如下:

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))

但是无法让它工作。

谢谢!

2个回答

3

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

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


1
也许我们可以尝试以下这样的 距离
> distances(
+   graph_from_data_frame(data, directed = FALSE),
+   weights = data$km
+ )
    1   2   3   4   6   8   5   7   9
1 0.0 0.3 0.8 1.0 1.8 1.4 1.1 3.8 1.8
2 0.3 0.0 0.5 0.7 1.5 1.1 0.8 3.5 1.5
3 0.8 0.5 0.0 0.2 1.0 0.6 0.3 3.0 1.0
4 1.0 0.7 0.2 0.0 1.2 0.8 0.1 3.2 1.2
6 1.8 1.5 1.0 1.2 0.0 1.6 1.3 2.0 2.0
8 1.4 1.1 0.6 0.8 1.6 0.0 0.9 3.6 0.4
5 1.1 0.8 0.3 0.1 1.3 0.9 0.0 3.3 1.3
7 3.8 3.5 3.0 3.2 2.0 3.6 3.3 0.0 4.0
9 1.8 1.5 1.0 1.2 2.0 0.4 1.3 4.0 0.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接