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

使用dplyr计算分组内每个成员到其他成员的最小距离

用dplyr计算分组内球员到最近同组球员的最小距离

需求说明

为数据集新增一列min_distance,表示每个ChanceId分组内,每个球员到同组其他9名球员的最小英尺距离。

解决方案

使用dplyr分组操作结合自定义函数实现,兼顾可读性与大规模分组的处理效率:

  1. 加载依赖包
library(dplyr)
  1. 定义计算最小距离的函数
    函数在单个分组内生成所有球员的坐标距离矩阵,排除自身到自身的距离后,提取每行最小值(即当前球员到最近队友的距离):
calc_min_distance <- function(x, y) {
  # 生成欧氏距离矩阵
  dist_matrix <- sqrt(outer(x, x, `-`)^2 + outer(y, y, `-`)^2)
  # 将对角线(自身距离)设为NA,避免干扰最小值计算
  diag(dist_matrix) <- NA
  # 提取每行最小值
  apply(dist_matrix, 1, min, na.rm = TRUE)
}
  1. 分组计算并新增列
    通过group_by按ChanceId分组,用mutate调用自定义函数生成结果:
data_with_min_dist <- data %>%
  group_by(ChanceId) %>%
  mutate(min_distance = calc_min_distance(X_RimLocation, Y_RimLocation)) %>%
  ungroup()

结果示例

查看处理后的数据集前6行:

head(data_with_min_dist)

输出结果:

# A tibble: 6 × 5
  ChanceId                              Player           X_RimLocation Y_RimLocation min_distance
  <chr>                                 <chr>                   <dbl>         <dbl>        <dbl>
1 AD885857-5C31-575C-9963-B4D88E320451 Robert Covington       -39.8          -7.97         4.60
2 AD885857-5C31-575C-9963-B4D88E320451 Mason Plumlee          -40.6           4.19         2.89
3 AD885857-5C31-575C-9963-B4D88E320451 Jusuf Nurkic           -40.1           1.51         2.89
4 AD885857-5C31-575C-9963-B4D88E320451 Ish Smith              -30.0          18.0         12.2 
5 AD885857-5C31-575C-9963-B4D88E320451 Gordon Hayward         -34.2         -22.2         13.0 
6 AD885857-5C31-575C-9963-B4D88E320451 Norman Powell          -32.9           4.39         4.52

优势说明

  • 基于dplyr的分组逻辑,代码结构清晰,符合tidyverse风格
  • 利用距离矩阵批量计算,比逐行循环效率更高,适合处理数千个分组的大规模数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:18:29