7  LB Rankings

7.1 Packages Needed

library(tidyverse)
library(DT)

7.2 Load LB Players

lbs <- read.csv("data/players.csv") %>% filter(position == "LB")

7.3 Load Necessary CSV Files

defense <- read.csv("data/defense_summary.csv") %>% 
  select(player_id, grades_run_defense, grades_pass_rush_defense, grades_coverage_defense, missed_tackle_rate, qb_rating_against) # rdef grade, prsh grade, cov grade, miss %, pass_rtg
run_defense <- read.csv("data/run_defense_summary.csv") %>% 
  select(player_id, stop_percent) # run stop %

7.4 Combine Datasets

lb_values <- lbs %>% 
  left_join(defense, by = c("id" = "player_id")) %>% 
  drop_na()
lb_values <- lb_values %>% 
  left_join(run_defense, by = c("id" = "player_id")) %>% 
  drop_na()
lb_values <- lb_values %>% 
  rename(rdef_grade = grades_run_defense, prsh_grade = grades_pass_rush_defense, cov_grade = grades_coverage_defense, miss_p = missed_tackle_rate, pass_rtg = qb_rating_against, run_stop_p = stop_percent) %>%
  select(-id)

7.5 Get Mean Values (for testing)

mean(lb_values$rdef_grade)
[1] 75.69091
mean(lb_values$prsh_grade)
[1] 68.42121
mean(lb_values$cov_grade)
[1] 65.35758
mean(lb_values$miss_p)
[1] 12.77879
mean(lb_values$pass_rtg)
[1] 90.22727
mean(lb_values$run_stop_p)
[1] 8.518182

7.6 Create Rating Function

get_lb_ratings <- function(input_df) {
  df_lb_copy <- input_df %>% mutate(
    rdef_grade = round(pmax(pmin((rdef_grade-65) / 2, 10), 0), 2), # 65-85, mean 75
    prsh_grade = round(pmax(pmin((prsh_grade-60) / 2, 10), 0), 2),  # 60-80, mean 70
    cov_grade = round(pmax(pmin((cov_grade-50) / 3, 10), 0), 2), # 50-80, mean 65
    miss_p = round(pmax(pmin(((100-miss_p)-83) / 1.2, 10), 0), 2), # 17-5, mean 11
    pass_rtg = round(pmax(pmin(((200-pass_rtg)-80) / 10, 5), 0), 2), # 120-70, mean 95, worth 5
    run_stop_p = round(pmax(pmin((run_stop_p-6), 5), 0), 2), # 6-11, mean 8.5, worth 5
  )
  
  return(df_lb_copy)
}

7.7 Create Final Dataset

lb_ratings <- get_lb_ratings(lb_values) %>% 
  mutate(total = rowSums(select(.,-name, -position, -team, -rank))) %>% 
  arrange(-total) #%>%
  #mutate(pos_rank_aft = row_number())

7.8 Display Ratings

datatable(lb_ratings)