9  S Rankings

9.1 Packages Needed

library(tidyverse)
library(DT)

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_grade

9.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)