r - 使用 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))
但不能让它工作。
谢谢!
解决方案
该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)
推荐阅读
- python - 图没有在 Jupyter 笔记本中使用 Matplotlib 填充交互式绘图中的画布
- python - Pandas - 从另一个数据帧返回最近的日期时间
- node.js - Docker 容器运行节点进程在等待对长请求的响应时终止
- sql - 如何在 Oracle 中创建具有特定 SQL 选择输出的过程?
- python - Pandas 从 CSV 中旋转并添加具有连续行的列
- python - geopandas没有属性clip
- python - urllib 请求给出 404 错误,但在浏览器中工作正常
- java - 如何修复错误:致命异常:java.lang.NoClassDefFoundError
- linux-kernel - tcpdump 在传出连接上是否 100% 可靠?
- javascript - 在服务器上调用 PHP 函数但在本地服务器上工作时找不到 JS 函数