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

求助:足球赛事数据集按自定义时段分组计算平均观众人数

足球赛事时段分组与平均观众数计算方案

现有某赛季约30行的足球赛事赛程数据集,包含变量:

  • 比赛日期
  • 比赛时间(格式如7:40pm、3:35pm)
  • 观众人数
  • 主队
  • 客队

需要将比赛时间按周五晚、周六下午、周六晚、周日下午、周日晚间自定义分组,并计算每个时段的平均观众人数。以下是具体实现方法:

方法一:基础R实现

1. 转换时间格式,提取小时数

首先把字符串格式的比赛时间转换成可提取小时的格式,方便后续分组:

# 将比赛时间转为时间格式,提取24小时制的小时数
new_data$hour <- as.numeric(strftime(strptime(new_data$比赛时间, "%I:%M%p"), "%H"))

2. 创建自定义时段分组

根据星期几和小时数,给每行数据标记对应的时段:

# 生成时段列,可根据实际赛事时段调整小时阈值
new_data$时段 <- with(new_data, 
  ifelse(Day == "Friday" & hour >= 18, "周五晚",
  ifelse(Day == "Saturday" & hour >= 12 & hour < 18, "周六下午",
  ifelse(Day == "Saturday" & hour >= 18, "周六晚",
  ifelse(Day == "Sunday" & hour >= 12 & hour < 18, "周日下午",
  ifelse(Day == "Sunday" & hour >= 18, "周日晚间", NA))))
)

注:这里默认下午为12:00-18:00,晚间为18:00及以后,可根据实际需求调整小时范围。

3. 计算各时段平均观众数

用aggregate函数完成分组统计:

# 按时段分组计算平均观众数,忽略NA值
时段平均观众 <- aggregate(Crowd ~ 时段, data = new_data, FUN = mean, na.rm = TRUE)
print(时段平均观众)

方法二:tidyverse工具实现(更简洁)

如果习惯用dplyr和lubridate,代码可读性和简洁性更好:

library(dplyr)
library(lubridate)

# 一站式完成时间转换、分组、统计
时段平均观众 <- new_data %>%
  # 解析比赛时间,提取小时数
  mutate(
    时间 = parse_time(比赛时间, "%I:%M%p"),
    hour = hour(时间)
  ) %>%
  # 定义时段分组逻辑
  mutate(
    时段 = case_when(
      Day == "Friday" & hour >= 18 ~ "周五晚",
      Day == "Saturday" & between(hour, 12, 17) ~ "周六下午",
      Day == "Saturday" & hour >= 18 ~ "周六晚",
      Day == "Sunday" & between(hour, 12, 17) ~ "周日下午",
      Day == "Sunday" & hour >= 18 ~ "周日晚间",
      TRUE ~ NA_character_
    )
  ) %>%
  # 分组计算平均观众数
  group_by(时段) %>%
  summarise(平均观众数 = mean(Crowd, na.rm = TRUE)) %>%
  ungroup()

print(时段平均观众)

额外说明

  • 如果需要更精确的时段划分(比如按17:30分界),可以把小时数转换成带小数的形式:hour + minute(时间)/60,再调整阈值
  • 不在上述时段的比赛会被标记为NA,可根据需求添加过滤或归为其他组的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:17:44