R语言求助:多数据集下NHL球员5年统计指标均值计算
批量计算NHL球员5年统计数据均值并合并到目标数据集
核心思路
不用逐个处理球员,用tidyverse工具链就能高效完成批量分组计算+合并,核心步骤是:合并多年度数据 → 按球员分组计算均值 → 与21-22赛季数据匹配合并。
具体操作步骤
1. 加载必要工具包
先确保安装并加载tidyverse(包含dplyr、tidyr等工具,完美适配pipe操作):
# 未安装的话先执行安装命令 # install.packages("tidyverse") library(tidyverse)
2. 合并多年度数据集
假设你导入的五个年度数据集分别命名为df_1718、df_1819、df_1920、df_2021、df_2122,将它们合并为一个完整数据集,同时标记赛季(可选,用于数据验证):
# 合并所有赛季数据,添加season列区分来源 all_years_data <- bind_rows( "17-18" = df_1718, "18-19" = df_1819, "19-20" = df_1920, "20-21" = df_2021, "21-22" = df_2122, .id = "season" )
3. 按球员分组计算5年均值
关键是要有唯一的球员标识列(比如player_id,尽量不用姓名避免重名问题),然后对15个统计列批量计算均值:
# 假设球员唯一标识为player_id,替换括号内的列名为你实际的15个统计数据列 player_5year_avg <- all_years_data %>% group_by(player_id) %>% # 按球员分组 summarize( across(c(goals, assists, points, hits, blocked_shots, ...), # 替换为你的统计列名 ~mean(.x, na.rm = TRUE), # 计算均值,忽略缺失值 .names = "avg_{.col}") # 自动给均值列命名为「avg_原列名」格式 )
4. 合并均值到21-22赛季数据集
将计算好的均值列匹配合并到目标数据集df_2122(即你说的'21-22 Player Data'):
# 按player_id匹配合并,保留21-22赛季的所有原始数据 df_2122_with_avg <- df_2122 %>% left_join(player_5year_avg, by = "player_id")
关键注意事项
- 球员唯一标识:必须用不重复的ID(比如NHL官方球员ID),避免同名球员的数据被错误合并;若只有姓名,先检查重名情况,必要时结合球队信息辅助区分。
- 缺失值处理:
na.rm=TRUE能避免因球员某赛季数据缺失导致均值为NA,根据需求可调整。 - 列名一致性:确保五个年度数据集中的统计列名完全一致,否则
across无法批量处理。
内容的提问来源于stack exchange,提问作者Ken Hunt
相关产品推荐
相关产品推荐

