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

如何在R中基于条件为球员顺序累加比赛数据?

按球员维度累计比赛统计数据的实现方案

假设你已经通过WorldFootballR的fb_player_match_logs()或同类函数拿到了球员单场比赛数据(数据框包含球员唯一标识、比赛日期、进球/助攻等统计字段),可以用以下步骤实现按球员的逐场累计累加:

1. 准备依赖包

先安装并加载dplyr,它能高效处理分组和累计计算:

install.packages("dplyr") # 首次运行需安装
library(dplyr)
library(WorldFootballR)

2. 先给数据排好序

累计的前提是比赛按时间顺序排列,否则结果完全错误。按球员ID+比赛日期升序排序:

# 假设你的原始数据框叫player_match_data
player_match_data <- player_match_data %>%
  arrange(player_id, match_date)

3. 分组计算累计值

按球员分组后,用cumsum()对每个统计字段做逐行累计。两种常见需求的实现:

需求A:保留单场数据,新增累计字段

如果要同时查看单场数据和到当前场的累计数据,这么写:

player_cumulative <- player_match_data %>%
  group_by(player_id, player_name) %>% # 用player_id避免重名球员混淆
  mutate(
    cum_goals = cumsum(goals),
    cum_assists = cumsum(assists),
    cum_total_passes = cumsum(total_passes),
    cum_matches_played = row_number() # 累计参赛场次
    # 其他需要累计的字段照着格式添加即可
  ) %>%
  ungroup() # 取消分组,方便后续数据操作

需求B:仅生成累计结果行

如果不需要保留单场数据,只需要到每场为止的累计值,上面的结果已经满足——每行就是对应球员到该场的累计统计数据。

4. 完整示例(单个球员测试)

比如获取梅西2023-2024赛季的比赛数据并计算累计:

# 从FBref获取梅西的比赛日志
messi_logs <- fb_player_match_logs(
  player_url = "https://fbref.com/en/players/d70ce98e/Lionel-Messi",
  season_end_year = 2024
)

# 排序+计算累计
messi_cumulative <- messi_logs %>%
  arrange(Date) %>% # 单个球员无需分组,多球员必须添加group_by(player_id)
  mutate(
    cum_goals = cumsum(Gls),
    cum_assists = cumsum(Ast),
    cum_minutes_played = cumsum(Min)
  )

踩坑提醒

  • 字段类型要正确:如果某些统计字段是带"-"的字符型(表示0),需要先转换为数值型,例如:mutate(goals = as.numeric(ifelse(goals == "-", 0, goals)))
  • 分组用唯一标识:别只用球员姓名,重名球员会导致数据混淆,用player_id更稳妥
  • 排序不能省略:一定要按比赛日期或轮次排序,否则累计逻辑完全错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:29:49