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

如何在DataFrame中按指定类别筛选并获取分组最小距离及对应站点

解决方法

要实现每个GridID.1站点对应最近的GridID.2站点及最短距离,同时输出类别标识,你可以用dplyr的slice_min函数保留分组中距离最小的完整行,而非只提取数值。修改后的代码如下:

library(dplyr)

# 读取数据
data <- read.csv("testsites.csv", header=TRUE)

# 筛选类别、分组取最小距离行、添加类别标识
df <- data %>%
  # 筛选GridID.1.binned_temp为1的记录
  filter(GridID.1.binned_temp == 1) %>%
  # 按GridID.1分组
  group_by(GridID.1) %>%
  # 提取每组中Distance.m.最小的1行,with_ties=FALSE避免多个相同最小距离的记录(按需调整)
  slice_min(Distance.m., n = 1, with_ties = FALSE) %>%
  # 取消分组状态
  ungroup() %>%
  # 添加类别标识列
  mutate(category = "temp1") %>%
  # 按需求选择并排列输出列
  select(category, GridID.1, GridID.2, Distance.m.)

代码说明:

  • slice_min:替代原来的summarize,直接保留每个分组中距离最小的完整记录,这样就能拿到对应的GridID.2站点ID
  • with_ties = FALSE:如果同一个GridID.1存在多个GridID.2距离相同且都是最小值,只保留其中一行;如果需要保留所有这类记录,去掉这个参数即可
  • mutate(category = "temp1"):手动添加类别标识列,明确输出的是GridID.1.binned_temp == 1的分组结果
  • select:调整输出列的顺序,匹配你需要的字段:类别标识、GridID.1站点ID、最近的GridID.2站点ID、最短距离

原代码问题:

你原来的代码在summarize中错误地将GridID.1赋值为min(Distance.m.),这会把站点ID覆盖成距离数值,导致输出只有距离,丢失了站点关联信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:35:07