You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R的igraph包中如何生成指定节点到所有节点的距离变量?

在igraph中计算指定节点到所有节点的距离

方法一:使用distances()函数(推荐,高效)

distances()是igraph专门用于计算最短路径距离的函数,直接返回源节点到所有节点的距离(边的数量),比逐个调用shortest_paths效率高得多,尤其适合节点数量多的场景(比如你的2415个节点)。

修正原有代码的列名问题(如果列名含横杠,需要用反引号包裹),然后计算距离:

library(tidyverse)
library(igraph)

# 读取数据
employees <- read_csv("employee_list.csv")
# 处理带横杠的列名,避免R解析成减法
EmpsSups <- data.frame(
  employee = employees$`employee-name`,
  supervisor = employees$supervisor,
  stringsAsFactors = FALSE
)

# 构建无向图
graph <- graph_from_data_frame(EmpsSups, directed = FALSE)

# 计算Smith, John到所有节点的最短距离
john_distances <- distances(graph, v = "Smith, John")

# 转换为易读的数据框格式
john_distances_df <- as.data.frame(t(john_distances)) %>%
  rename(distance = 1) %>%
  mutate(employee = rownames(.)) %>%
  select(employee, distance)

方法二:基于shortest_paths提取路径长度

如果需要保留路径信息同时计算距离,可以从shortest_paths的结果中提取路径的顶点数量,距离 = 顶点数 - 1(因为7个顶点的路径对应6条边,即距离为6):

# 获取Smith, John到所有节点的最短路径
paths <- shortest_paths(graph, from = "Smith, John", to = V(graph), mode = "all")

# 提取每个路径的顶点数,计算距离
john_distances_from_paths <- sapply(paths$vpath, function(p) length(p) - 1)

# 转换为数据框
john_distances_paths_df <- data.frame(
  employee = names(john_distances_from_paths),
  distance = john_distances_from_paths,
  stringsAsFactors = FALSE
)

结果说明

两种方法得到的distance列就是Smith, John到对应员工的最短路径距离:

  • 示例中路径含7个顶点,对应距离为6
  • 若节点与Smith, John直接相连,距离为1;Smith, John自身距离为0

内容的提问来源于stack exchange,提问作者mdbeauregard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:40:27