如何用dplyr统计F1赛事起步领跑最终夺冠的相对频率
实现方案
首先安装并加载所需依赖包:
# 安装依赖包(仅首次运行需要) install.packages(c("dplyr", "tidyr", "readr")) # 加载包 library(dplyr) library(tidyr) library(readr)
数据读取
使用你提供的url直接读取数据集:
url <- paste0("https://10d9b011-755b-4b59-9f64-dbfb2ae95d87.filesusr.com/", "ugd/0c24ab_a29a977ec1404b69bf7cc34fcc58b073.csv?", "dn=Aus%20GP%20Lap%20Data.csv") f1_data <- read_csv(url)
统计实现
stat_result <- f1_data %>% # 仅保留第1圈和最后一圈的记录,过滤无效数据 filter(lap %in% c(1, 58)) %>% # 按年份、车手分组,避免跨赛事/跨车手的记录混淆 group_by(Year, driverId) %>% # 仅保留同一年同时有第1圈、第58圈记录的车手(排除未完赛车手) filter(n() == 2) %>% # 长表转宽表,把圈数转为列名,对应排名作为列值 pivot_wider(names_from = lap, values_from = position, names_prefix = "lap_") %>% ungroup() %>% # 筛选起步第一且最终夺冠的记录 filter(lap_1 == 1, lap_58 == 1) # 计算核心指标 total_races <- n_distinct(f1_data$Year) # 总赛事场数 win_count <- nrow(stat_result) # 满足条件的场次数 win_rate <- win_count / total_races # 相对占比
结果查看
# 输出统计值 cat("起步领跑车手最终夺冠的次数:", win_count, "\n") cat("1996-2019年总赛事场数:", total_races, "\n") cat("起步夺冠占比:", round(win_rate * 100, 2), "%\n") # 查看所有满足条件的对应年份和车手信息 print(stat_result %>% select(Year, driverId))
内容的提问来源于stack exchange,提问作者Manbearpig
相关产品推荐
相关产品推荐

