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

如何使用dplyr按变量层级实现指定指标的分组求和?

解决dplyr分组求和的问题

没问题,我来帮你搞定这个运动表现数据的分组求和需求!结合你提到的需求,我会分情况给出清晰的代码示例,帮你快速实现目标。

首先假设你的matchdb2018数据集是长格式(每行对应一个球员-日期-季度的记录,包含Quarter列,值为"Quarter 1"或"Quarter 2"),我们可以这样写代码:

# 先加载需要的包
library(dplyr)
library(tidyr) # 用于格式转换(可选)

# 核心处理代码
summary_data <- matchdb2018 %>%
  # 过滤只保留Quarter 1和Quarter 2的数据(如果数据集里有其他季度的话)
  filter(Quarter %in% c("Quarter 1", "Quarter 2")) %>%
  # 按球员姓名和日期分组,这是你要求的层级分组核心
  group_by(Player.Name, Date, Quarter) %>%
  # 批量对三个指标求和,自动忽略缺失值
  summarize(
    across(
      c(Average.Distance, Total.HIR, V6.Distance),
      ~sum(.x, na.rm = TRUE)
    ),
    .groups = "drop_last" # 保留球员和日期的分组,方便后续转格式
  ) %>%
  # 把长格式转成宽格式,让Q1和Q2的结果并列展示(可选,根据你的输出需求调整)
  pivot_wider(
    names_from = Quarter,
    values_from = c(Average.Distance, Total.HIR, V6.Distance),
    names_glue = "{.name}_{str_replace(Quarter, 'Quarter ', 'Q')}" # 生成类似Average.Distance_Q1的列名
  ) %>%
  ungroup() # 取消分组(可选)

如果你的数据集是宽格式(每个季度的指标是单独列,比如Average.Distance_Q1、Average.Distance_Q2),代码会更简单直接:

summary_data <- matchdb2018 %>%
  group_by(Player.Name, Date) %>%
  summarize(
    # 直接对每个季度的指标分别求和
    Average.Distance_Q1 = sum(Average.Distance_Q1, na.rm = TRUE),
    Average.Distance_Q2 = sum(Average.Distance_Q2, na.rm = TRUE),
    Total.HIR_Q1 = sum(Total.HIR_Q1, na.rm = TRUE),
    Total.HIR_Q2 = sum(Total.HIR_Q2, na.rm = TRUE),
    V6.Distance_Q1 = sum(V6.Distance_Q1, na.rm = TRUE),
    V6.Distance_Q2 = sum(V6.Distance_Q2, na.rm = TRUE),
    .groups = "drop" # 分组完成后取消分组,避免后续操作受分组影响
  )

关键细节说明:

  • group_by(Player.Name, Date):严格按照你要求的层级分组,确保每个分组都是同一个球员在同一天的所有数据。
  • across()函数:帮你批量处理多个指标,避免重复写相同的求和代码,让代码更简洁易维护。
  • na.rm = TRUE:避免因为数据中的缺失值导致求和结果变成NA,如果你确认数据集没有缺失值,可以去掉这个参数。
  • pivot_wider():把长格式数据转成更易读的宽格式,如果你更习惯长格式输出,可以直接去掉这一步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:16:02