如何筛选连续3赛季参赛的球员数据及统计项逐年递增记录
筛选连续3+赛季参赛且EV.GF.逐年递增的球员记录
第一步:筛选拥有连续3个及以上赛季参赛记录的球员
先按球员和赛季排序,再通过计算赛季间隔标记连续赛季分组,最终筛选出包含连续3+赛季的球员记录:
library(dplyr) # 排序并标记连续赛季分组 pick224_structure <- pick224_structure %>% arrange(Player, Season) %>% group_by(Player) %>% # 转换赛季为可计算的数值(示例:"2020-21"格式转成2020,根据你的Season格式调整) mutate(season_num = as.integer(substr(Season, 1, 4)), # 计算当前赛季与上一赛季的间隔,1代表连续 season_gap = season_num - lag(season_num, default = first(season_num)), # 标记连续赛季的分组ID consecutive_group = data.table::rleid(season_gap), # 统计每个连续分组的赛季数量 group_season_count = n()) %>% ungroup() # 筛选出包含连续3+赛季的所有记录 consecutive_players_data <- pick224_structure %>% group_by(Player, consecutive_group) %>% filter(n() >= 3) %>% ungroup()
说明:
- 若你的Season格式不是"YYYY-YY",需修改
season_num的转换逻辑,比如本身是整数赛季可直接跳过转换 data.table::rleid用于给连续的赛季段分配相同分组ID,方便统计每组长度
第二步:筛选EV.GF.逐年递增的连续赛季记录
基于第一步的结果,检查每个连续赛季组内的EV.GF.是否满足逐年递增:
# 处理EV.GF.格式(如果是百分比字符串,先转成数值) consecutive_players_data <- consecutive_players_data %>% mutate(EV.GF. = as.numeric(sub("%", "", EV.GF.))) # 若已是数值可跳过 # 筛选EV.GF.逐年递增的记录 increasing_evgf_data <- consecutive_players_data %>% group_by(Player, consecutive_group) %>% # 标记当前赛季EV.GF.是否大于上一赛季 mutate(is_increasing = EV.GF. > lag(EV.GF., default = -Inf), # 确认整个连续组内所有赛季都满足递增 all_increasing = all(is_increasing, na.rm = TRUE)) %>% filter(all_increasing) %>% ungroup()
说明:
- 若EV.GF.已是数值类型,跳过格式转换步骤
na.rm = TRUE用于处理可能存在的缺失值,避免筛选失效
内容的提问来源于stack exchange,提问作者ThePanda
相关产品推荐
相关产品推荐

