Update app.R
Browse files
app.R
CHANGED
|
@@ -1090,35 +1090,44 @@ clean_college_data <- function(data, teams = NA) {
|
|
| 1090 |
data <- data %>%
|
| 1091 |
filter(!(Level %in% c("D2", "JUCO", "NAIA", "D3")))
|
| 1092 |
|
| 1093 |
-
#predict xwoba
|
| 1094 |
-
data <-
|
| 1095 |
-
|
| 1096 |
-
|
| 1097 |
-
|
| 1098 |
-
|
| 1099 |
-
|
| 1100 |
-
|
| 1101 |
-
|
| 1102 |
-
|
| 1103 |
-
|
| 1104 |
-
|
| 1105 |
-
|
| 1106 |
-
|
| 1107 |
-
|
| 1108 |
-
|
| 1109 |
-
|
| 1110 |
-
|
| 1111 |
-
|
| 1112 |
-
|
| 1113 |
-
|
| 1114 |
-
|
| 1115 |
-
|
| 1116 |
-
|
| 1117 |
-
|
| 1118 |
-
|
| 1119 |
-
|
| 1120 |
-
|
| 1121 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1122 |
|
| 1123 |
message(nrow(data), " rows cleaned.")
|
| 1124 |
|
|
|
|
| 1090 |
data <- data %>%
|
| 1091 |
filter(!(Level %in% c("D2", "JUCO", "NAIA", "D3")))
|
| 1092 |
|
| 1093 |
+
#If able predict xwoba, if not enough data default to NA
|
| 1094 |
+
data <- tryCatch({
|
| 1095 |
+
d <- data %>% mutate(row_id = row_number())
|
| 1096 |
+
prob_cols <- c("prob_0", "prob_1", "prob_2", "prob_3", "prob_4")
|
| 1097 |
+
|
| 1098 |
+
complete <- d %>%
|
| 1099 |
+
filter(!is.na(ExitSpeed) & !is.na(Angle)) %>%
|
| 1100 |
+
dplyr::select(-any_of(prob_cols))
|
| 1101 |
+
|
| 1102 |
+
xwoba_preds <- predict(xwoba_model, complete, type = "prob")
|
| 1103 |
+
colnames(xwoba_preds) <- prob_cols
|
| 1104 |
+
|
| 1105 |
+
complete <- complete %>% bind_cols(xwoba_preds)
|
| 1106 |
+
|
| 1107 |
+
d <- d %>%
|
| 1108 |
+
dplyr::select(-any_of(prob_cols)) %>%
|
| 1109 |
+
left_join(complete %>% dplyr::select(row_id, any_of(prob_cols)), by = "row_id") %>%
|
| 1110 |
+
dplyr::select(-row_id)
|
| 1111 |
+
|
| 1112 |
+
d <- d %>%
|
| 1113 |
+
dplyr::select(-any_of(c("w1B", "w2B", "w3B", "wHR"))) %>%
|
| 1114 |
+
cross_join(college_guts %>% dplyr::select(w1B, w2B, w3B, wHR)) %>%
|
| 1115 |
+
mutate(xwOBA = w1B*prob_1 + w2B*prob_2 + w3B*prob_3 + wHR*prob_4 + 0*prob_0,
|
| 1116 |
+
xwOBA = case_when(
|
| 1117 |
+
KorBB == "Strikeout" ~ 0,
|
| 1118 |
+
KorBB == "Walk" ~ .82,
|
| 1119 |
+
event_type == "HBP" ~ .85,
|
| 1120 |
+
TRUE ~ xwOBA
|
| 1121 |
+
))
|
| 1122 |
+
d
|
| 1123 |
+
}, error = function(e) {
|
| 1124 |
+
message("xwOBA prediction failed: ", conditionMessage(e), " \u2014 setting xwOBA and prob_* to NA.")
|
| 1125 |
+
data %>% mutate(
|
| 1126 |
+
prob_0 = NA_real_, prob_1 = NA_real_, prob_2 = NA_real_,
|
| 1127 |
+
prob_3 = NA_real_, prob_4 = NA_real_,
|
| 1128 |
+
xwOBA = NA_real_
|
| 1129 |
+
)
|
| 1130 |
+
})
|
| 1131 |
|
| 1132 |
message(nrow(data), " rows cleaned.")
|
| 1133 |
|