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

基于sfnetworks R从最短路径创建可筛选子图的技术咨询

空间网络最短路径子图构建与长度筛选方案

一、路径总长度计算与筛选

先计算每条路径的总长度,再筛选出符合长度条件的路径,以下分别针对sfnetworks和igraph的结果处理:

1. 基于sfnetworks结果的处理

利用short_paths_sf中的边索引,结合原网络的边权重计算总长度并筛选:

# 提取所有路径的边索引列表
edge_paths <- short_paths_sf$edge_paths

# 计算每条路径的总长度
path_lengths <- sapply(edge_paths, function(edges) {
  if (length(edges) == 0) return(0)  # 处理起点自身的空路径
  sum(net %>% activate(edges) %>% slice(edges) %>% pull(weight))
})

# 给路径结果添加长度列
short_paths_sf <- short_paths_sf %>% mutate(total_length = path_lengths)

# 筛选符合条件的路径(示例:总长度<50m 或 100-500m)
filtered_paths_sf <- short_paths_sf %>%
  filter(total_length < 50 | (total_length >= 100 & total_length <= 500))

2. 基于igraph结果的处理

通过short_paths_ig的边对象直接提取权重求和,再筛选路径:

# 提取所有路径的边对象列表
ig_edge_paths <- short_paths_ig$epath

# 计算每条路径的总长度
ig_path_lengths <- sapply(ig_edge_paths, function(edges) {
  if (length(edges) == 0) return(0)
  sum(E(net)[edges]$weight)
})

# 筛选符合条件的路径索引
filtered_indices <- which(ig_path_lengths < 50 | (ig_path_lengths >= 100 & ig_path_lengths <= 500))
# 提取筛选后的边路径
filtered_ig_edge_paths <- ig_edge_paths[filtered_indices]

二、构建筛选后的子图

1. 基于sfnetworks的子图构建

提取筛选路径中所有涉及的边(去重),直接切片原网络得到子图:

# 提取所有筛选路径中的边索引并去重
filtered_edges <- unlist(filtered_paths_sf$edge_paths) %>% unique()

# 构建子图
subnet_sf <- net %>% activate(edges) %>% slice(filtered_edges)

2. 基于igraph的子图构建

用subgraph.edges方法,传入去重后的边ID构建子图,也可转回sfnetwork格式:

# 提取所有筛选路径中的边ID并去重
filtered_ig_edge_ids <- unlist(lapply(filtered_ig_edge_paths, function(x) as_ids(x))) %>% unique()

# 构建igraph子图
subnet_ig <- igraph::subgraph.edges(net, eids = filtered_ig_edge_ids, delete.vertices = TRUE)

# (可选)转回sfnetwork格式
subnet_ig_sf <- as_sfnetwork(subnet_ig)

补充说明

  • 空路径处理:当目标节点包含起点自身时,路径边数为0,总长度设为0,可根据需求决定是否保留这类路径。
  • 边去重:多条路径可能共享同一条边,构建子图时去重可避免重复存储边数据。
  • 结果验证:可通过plot(subnet_sf)或plot(subnet_ig)快速查看子图是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:47:42