library(tidyverse)
library(DT)9 S Rankings
9.1 Packages Needed
9.2 Load S Players
safs <- read.csv("data/players.csv") %>% filter(position == "S")9.3 Load Necessary CSV Files
defense <- read.csv("data/defense_summary.csv") %>%
select(player_id, missed_tackle_rate, qb_rating_against, grades_run_defense) # miss %, pass_rtg, rdef_grade
cov_defense <- read.csv("data/defense_coverage_scheme.csv") %>%
select(player_id, man_grades_coverage_defense, zone_grades_coverage_defense) # man_grade, zone_grade9.4 Combine Datasets
s_values <- safs %>%
left_join(defense, by = c("id" = "player_id")) %>%
drop_na()
s_values <- s_values %>%
left_join(cov_defense, by = c("id" = "player_id")) %>%
drop_na()
s_values <- s_values %>%
rename(miss_p = missed_tackle_rate, pass_rtg = qb_rating_against, man_grade = man_grades_coverage_defense, zone_grade = zone_grades_coverage_defense, rdef_grade = grades_run_defense) %>%
select(-id)9.5 Get Mean Values (for testing)
mean(s_values$miss_p)[1] 13.60645
mean(s_values$pass_rtg)[1] 78.57097
mean(s_values$rdef_grade)[1] 73.85806
mean(s_values$man_grade)[1] 68.90968
mean(s_values$zone_grade)[1] 72.45161
9.6 Create Rating Function
get_s_ratings <- function(input_df) {
df_s_copy <- input_df %>% mutate(
man_grade = round(pmax(pmin((man_grade-55) / 3, 10), 0), 2), # 55-85, mean 70
zone_grade = round(pmax(pmin((zone_grade-55) / 3, 10), 0), 2), # 55-85, mean 70
rdef_grade = round(pmax(pmin((rdef_grade-60) / 2.5, 10), 0), 2), # 60-85, mean 72.5
miss_p = round(pmax(pmin(((100-miss_p)-82), 10), 0), 2), # 18-8, mean 13
pass_rtg = round(pmax(pmin(((200-pass_rtg)-80) / 6, 10), 0), 2), # 120-60, mean 85
)
return(df_s_copy)
}9.7 Create Final Dataset
s_ratings <- get_s_ratings(s_values) %>%
mutate(total = rowSums(select(.,-name, -position, -team, -rank))) %>%
arrange(-total) #%>%
#mutate(pos_rank_aft = row_number())9.8 Display Ratings
datatable(s_ratings)