TimStats commited on
Commit
d0b6341
·
verified ·
1 Parent(s): af71f11

Update app.R

Browse files
Files changed (1) hide show
  1. app.R +101 -28
app.R CHANGED
@@ -3,10 +3,9 @@ library(gt)
3
  library(dplyr)
4
  library(shinyjs)
5
  library(shinyauthr)
6
- #library(gtExtras)
7
  library(bslib)
8
- library(httr)
9
- #library(baseballr)
10
 
11
  download_private_csv <- function(repo_id, filename) {
12
  url <- paste0("https://huggingface.co/datasets/", repo_id, "/resolve/main/", filename)
@@ -30,8 +29,8 @@ download_private_csv <- function(repo_id, filename) {
30
  }
31
 
32
  Beam <- download_private_csv("TimStats/CollegePriv", "Beam.csv")
33
- TMP <- download_private_csv("TimStats/CollegePriv", "TMP.csv")
34
- TMB <- download_private_csv("TimStats/CollegePriv", "TMB.csv")
35
 
36
  test <- Beam %>%
37
  select(Date,PitchofPA,Pitcher,PitcherId,PitcherThrows,PitcherTeam,Batter,BatterId,
@@ -69,6 +68,12 @@ test <- test %>%
69
  "Out" = case_when(PlayResult %in% c ("Out") ~ TRUE, TRUE ~ FALSE),
70
  "BIP" = Single + Double + Triple + HR + Sac + Error + Out + FC,
71
  "Count" = paste0(Balls,"-",Strikes),
 
 
 
 
 
 
72
  "Strikeout" = ifelse(KorBB == "Strikeout",TRUE,FALSE),
73
  "Walk" = ifelse(KorBB == "Walk",TRUE,FALSE),
74
  "Zone" = case_when(between(PlateLocSide,-.825,.825) & between(PlateLocHeight,1.45,3.45) ~ TRUE, TRUE ~ FALSE),
@@ -76,8 +81,8 @@ test <- test %>%
76
  "PA" = Strikeout + BIP + Walk + HBP
77
  )
78
  test <- test %>%
79
- left_join(TMB, by = c(BatterTeam = "team_abbr")) %>%
80
- left_join(TMP, by = c(PitcherTeam = "team_abbr")) %>%
81
  mutate(PitcherAndTeam = paste0(Pitcher," - ",PTeamName)) %>%
82
  mutate(BatterAndTeam = paste0(Batter," - ",BTeamName))
83
 
@@ -165,8 +170,8 @@ gt_theme_tim <- function(gt_object,...) {
165
  }
166
 
167
  user_base <- tibble::tibble(
168
- user = c(Sys.getenv(Username)),
169
- password = (c(Sys.getenv(Password))),
170
  permissions = c("admin"),
171
  name = c("User One")
172
  )
@@ -183,11 +188,10 @@ ui <- fluidPage(
183
  )
184
  ),
185
 
186
- # Rest of your existing UI code stays exactly the same
187
  div(class = "pull-right", shinyauthr::logoutUI(id = "logout")),
188
-
189
  shinyauthr::loginUI(id = "login"),
190
-
191
  div(
192
  id = "bar",
193
  titlePanel("TimMedia"),
@@ -299,12 +303,8 @@ server <- function(input, output, session) {
299
  shinyjs::hide(id = "bar")
300
  }
301
  })
302
- # observeEvent(input$date,{
303
- # test <- test %>% filter(between(as.Date(Date),input$date[1],input$date[2]))
304
- # })
305
-
306
  output$CountFilterP <- render_gt({
307
- test <- test %>% filter(PitcherAndTeam == input$player) %>% group_by(Count) %>%
308
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
309
  summarise(
310
  Pitches = n(),
@@ -329,7 +329,37 @@ server <- function(input, output, session) {
329
  sum(PA,na.rm = TRUE),digits = 3),
330
  "SLG" = (round(sum(Single,na.rm = TRUE) + sum(Double,na.rm = TRUE) * 2 +
331
  sum(Triple,na.rm = TRUE) * 3 + sum(HR,na.rm = TRUE)))/sum(AB,na.rm = TRUE))%>%
332
- ungroup()%>%
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
333
  gt() %>%
334
  gt_theme_tim() %>%
335
  fmt_number(columns = `Avg EV`:`Max EV`,decimals = 1) %>%
@@ -346,7 +376,7 @@ server <- function(input, output, session) {
346
  )
347
  })
348
  output$PitchFilterP <- render_gt({
349
- tes <- test %>%
350
  filter(PitcherAndTeam == input$player) %>%
351
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
352
  group_by(AutoPitchType) %>%
@@ -354,6 +384,7 @@ server <- function(input, output, session) {
354
  Pitches = n(),
355
  # BBE = sum(BBE,na.rm = TRUE),
356
  "Usage%" = n() / nrow(.), # Added Usage% calculation
 
357
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
358
  "SwStr%" = mean(Whiff,na.rm = TRUE),
359
  "CSW%" = mean(CSW, na.rm = TRUE),
@@ -396,7 +427,7 @@ server <- function(input, output, session) {
396
  )
397
  })
398
  output$PitchSideFilterP <- render_gt({
399
- test <- test %>%
400
  filter(PitcherAndTeam == input$player) %>%
401
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
402
  group_by(BatterSide) %>%
@@ -407,6 +438,7 @@ server <- function(input, output, session) {
407
  Pitches = n(),
408
  #BBE = sum(BBE,na.rm = TRUE),
409
  "Usage%" = (n() / first(total_side)),
 
410
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
411
  "SwStr%" = mean(Whiff,na.rm = TRUE),
412
  "CSW%" = mean(CSW, na.rm = TRUE),
@@ -450,11 +482,12 @@ server <- function(input, output, session) {
450
  )
451
  })
452
  output$InningFilterP <- render_gt({
453
- test <- test %>% filter(PitcherAndTeam == input$player) %>% group_by(Inning) %>%
454
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
455
  summarise(
456
  Pitches = n(),
457
  #BBE = sum(BBE,na.rm = TRUE),
 
458
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
459
  "SwStr%" = mean(Whiff,na.rm = TRUE),
460
  "CSW%" = mean(CSW,na.rm = TRUE),
@@ -497,6 +530,7 @@ server <- function(input, output, session) {
497
  summarise(
498
  Pitches = n(),
499
  #BBE = sum(BBE,na.rm = TRUE),
 
500
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
501
  "SwStr%" = mean(Whiff,na.rm = TRUE),
502
  "CSW%" = mean(CSW,na.rm = TRUE),
@@ -523,6 +557,7 @@ server <- function(input, output, session) {
523
  summarise(
524
  Pitches = n(),
525
  #BBE = sum(BBE,na.rm = TRUE),
 
526
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
527
  "SwStr%" = mean(Whiff,na.rm = TRUE),
528
  "CSW%" = mean(CSW,na.rm = TRUE),
@@ -564,7 +599,7 @@ server <- function(input, output, session) {
564
 
565
  })
566
  output$slashlineP <- render_gt({
567
- test <- test %>% filter(PitcherAndTeam == input$player) %>%
568
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
569
  summarise(
570
  Pitches = n(),
@@ -589,11 +624,12 @@ server <- function(input, output, session) {
589
  })
590
 
591
  output$CountFilterB <- render_gt({
592
- test <- test %>% filter(BatterAndTeam == input$player) %>% group_by(Count) %>%
593
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
594
  summarise(
595
  Pitches = n(),
596
  #BBE = sum(BBE,na.rm = TRUE),
 
597
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
598
  "SwStr%" = mean(Whiff,na.rm = TRUE),
599
  "CSW%" = mean(CSW,na.rm = TRUE),
@@ -614,7 +650,37 @@ server <- function(input, output, session) {
614
  sum(PA,na.rm = TRUE),digits = 3),
615
  "SLG" = (round(sum(Single,na.rm = TRUE) + sum(Double,na.rm = TRUE) * 2 +
616
  sum(Triple,na.rm = TRUE) * 3 + sum(HR,na.rm = TRUE)))/sum(AB,na.rm = TRUE))%>%
617
- ungroup()%>%
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
618
  gt() %>%
619
  gt_theme_tim() %>%
620
  fmt_number(columns = `Avg EV`:`Max EV`,decimals = 1) %>%
@@ -631,7 +697,7 @@ server <- function(input, output, session) {
631
  )
632
  })
633
  output$PitchFilterB <- render_gt({
634
- tes <- test %>%
635
  filter(BatterAndTeam == input$player) %>%
636
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
637
  group_by(AutoPitchType) %>%
@@ -639,6 +705,7 @@ server <- function(input, output, session) {
639
  Pitches = n(),
640
  # BBE = sum(BBE,na.rm = TRUE),
641
  "Pitch%" = n() / nrow(.), # Added Pitch% calculation
 
642
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
643
  "SwStr%" = mean(Whiff,na.rm = TRUE),
644
  "CSW%" = mean(CSW, na.rm = TRUE),
@@ -681,7 +748,7 @@ server <- function(input, output, session) {
681
  )
682
  })
683
  output$PitchSideFilterB <- render_gt({
684
- test <- test %>%
685
  filter(BatterAndTeam == input$player) %>%
686
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
687
  group_by(PitcherThrows) %>%
@@ -692,6 +759,7 @@ server <- function(input, output, session) {
692
  Pitches = n(),
693
  #BBE = sum(BBE,na.rm = TRUE),
694
  "Pitch%" = (n() / first(total_side)),
 
695
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
696
  "SwStr%" = mean(Whiff,na.rm = TRUE),
697
  "CSW%" = mean(CSW, na.rm = TRUE),
@@ -735,11 +803,12 @@ server <- function(input, output, session) {
735
  )
736
  })
737
  output$InningFilterB <- render_gt({
738
- test <- test %>% filter(BatterAndTeam == input$player) %>% group_by(Inning) %>%
739
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
740
  summarise(
741
  Pitches = n(),
742
  #BBE = sum(BBE,na.rm = TRUE),
 
743
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
744
  "SwStr%" = mean(Whiff,na.rm = TRUE),
745
  "CSW%" = mean(CSW,na.rm = TRUE),
@@ -782,6 +851,7 @@ server <- function(input, output, session) {
782
  summarise(
783
  Pitches = n(),
784
  #BBE = sum(BBE,na.rm = TRUE),
 
785
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
786
  "SwStr%" = mean(Whiff,na.rm = TRUE),
787
  "CSW%" = mean(CSW,na.rm = TRUE),
@@ -808,6 +878,7 @@ server <- function(input, output, session) {
808
  summarise(
809
  Pitches = n(),
810
  #BBE = sum(BBE,na.rm = TRUE),
 
811
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
812
  "SwStr%" = mean(Whiff,na.rm = TRUE),
813
  "CSW%" = mean(CSW,na.rm = TRUE),
@@ -849,7 +920,7 @@ server <- function(input, output, session) {
849
 
850
  })
851
  output$slashlineB <- render_gt({
852
- test <- test %>% filter(BatterAndTeam == input$player) %>%
853
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
854
  summarise(
855
  Pitches = n(),
@@ -873,6 +944,8 @@ server <- function(input, output, session) {
873
  )
874
  })
875
 
 
 
876
  }
877
 
878
  # Run the application
 
3
  library(dplyr)
4
  library(shinyjs)
5
  library(shinyauthr)
6
+ library(gtExtras)
7
  library(bslib)
8
+ library(baseballr)
 
9
 
10
  download_private_csv <- function(repo_id, filename) {
11
  url <- paste0("https://huggingface.co/datasets/", repo_id, "/resolve/main/", filename)
 
29
  }
30
 
31
  Beam <- download_private_csv("TimStats/CollegePriv", "Beam.csv")
32
+ Beam <- download_private_csv("TimStats/TMP", "Beam.csv")
33
+ Beam <- download_private_csv("TimStats/RMB", "Beam.csv")
34
 
35
  test <- Beam %>%
36
  select(Date,PitchofPA,Pitcher,PitcherId,PitcherThrows,PitcherTeam,Batter,BatterId,
 
68
  "Out" = case_when(PlayResult %in% c ("Out") ~ TRUE, TRUE ~ FALSE),
69
  "BIP" = Single + Double + Triple + HR + Sac + Error + Out + FC,
70
  "Count" = paste0(Balls,"-",Strikes),
71
+ "BSituation" = ifelse(Balls > Strikes,"Ahead",NA),
72
+ "BSituation" = ifelse(Balls < Strikes,"Behind",BSituation),
73
+ "BSituation" = ifelse(Balls == Strikes,"Even",BSituation),
74
+ "PSituation" = ifelse(Balls < Strikes,"Ahead",NA),
75
+ "PSituation" = ifelse(Balls > Strikes,"Behind",PSituation),
76
+ "PSituation" = ifelse(Balls == Strikes,"Even",PSituation),
77
  "Strikeout" = ifelse(KorBB == "Strikeout",TRUE,FALSE),
78
  "Walk" = ifelse(KorBB == "Walk",TRUE,FALSE),
79
  "Zone" = case_when(between(PlateLocSide,-.825,.825) & between(PlateLocHeight,1.45,3.45) ~ TRUE, TRUE ~ FALSE),
 
81
  "PA" = Strikeout + BIP + Walk + HBP
82
  )
83
  test <- test %>%
84
+ left_join(TMSchoolsB, by = c(BatterTeam = "team_abbr")) %>%
85
+ left_join(TMSchoolsP, by = c(PitcherTeam = "team_abbr")) %>%
86
  mutate(PitcherAndTeam = paste0(Pitcher," - ",PTeamName)) %>%
87
  mutate(BatterAndTeam = paste0(Batter," - ",BTeamName))
88
 
 
170
  }
171
 
172
  user_base <- tibble::tibble(
173
+ user = c(Sys.getenv("Username")),
174
+ password = (c(Sys.getenv("Password"))),
175
  permissions = c("admin"),
176
  name = c("User One")
177
  )
 
188
  )
189
  ),
190
 
 
191
  div(class = "pull-right", shinyauthr::logoutUI(id = "logout")),
192
+
193
  shinyauthr::loginUI(id = "login"),
194
+
195
  div(
196
  id = "bar",
197
  titlePanel("TimMedia"),
 
303
  shinyjs::hide(id = "bar")
304
  }
305
  })
 
 
 
 
306
  output$CountFilterP <- render_gt({
307
+ t <- test %>% filter(PitcherAndTeam == input$player) %>% group_by(Count) %>%
308
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
309
  summarise(
310
  Pitches = n(),
 
329
  sum(PA,na.rm = TRUE),digits = 3),
330
  "SLG" = (round(sum(Single,na.rm = TRUE) + sum(Double,na.rm = TRUE) * 2 +
331
  sum(Triple,na.rm = TRUE) * 3 + sum(HR,na.rm = TRUE)))/sum(AB,na.rm = TRUE))%>%
332
+ ungroup()
333
+
334
+ tt <- test %>% mutate(Count = PSituation) %>% filter(PitcherAndTeam == input$player) %>% group_by(Count) %>%
335
+ filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
336
+ summarise(
337
+ Pitches = n(),
338
+ #BBE = sum(BBE,na.rm = TRUE),
339
+ "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
340
+ "SwStr%" = mean(Whiff,na.rm = TRUE),
341
+ "CSW%" = mean(CSW,na.rm = TRUE),
342
+ "Zone%" = mean(Zone,na.rm = TRUE),
343
+ "ZCon%" = mean(Contact[Zone == TRUE & Swing == TRUE],na.rm = TRUE),
344
+ "ZSwing%" = mean(Swing[Zone == TRUE],na.rm = TRUE),
345
+ "OCon%" = mean(Contact[Zone == FALSE & Swing == TRUE],na.rm = TRUE),
346
+ "OSwing%" = mean(Swing[Zone == FALSE],na.rm = TRUE),
347
+ "Avg EV" = mean(ExitSpeed[BBE == TRUE],na.rm = TRUE),
348
+ "EV90" = quantile(ExitSpeed[BBE == TRUE],.9,na.rm = TRUE),
349
+ "Max EV" = max(ExitSpeed[BBE == TRUE],na.rm = TRUE),
350
+ "Max EV" = ifelse(is.infinite(`Max EV`),NA,`Max EV`),
351
+ "GB%" = mean(GB[BBE == TRUE],na.rm = TRUE),
352
+ "LD%" = mean(LD[BBE == TRUE],na.rm = TRUE),
353
+ "FB%" = mean(FB[BBE == TRUE],na.rm = TRUE),
354
+ "AVG" = round(sum(Hit,na.rm = TRUE) / sum(AB,na.rm = TRUE),digits = 3),
355
+ "OBP" = round((sum(Hit,na.rm = TRUE) + sum(Walk,na.rm = TRUE) + sum(HBP,na.rm = TRUE))/
356
+ sum(PA,na.rm = TRUE),digits = 3),
357
+ "SLG" = (round(sum(Single,na.rm = TRUE) + sum(Double,na.rm = TRUE) * 2 +
358
+ sum(Triple,na.rm = TRUE) * 3 + sum(HR,na.rm = TRUE)))/sum(AB,na.rm = TRUE)) %>%
359
+ ungroup()
360
+
361
+ test <- rbind(tt,t)
362
+ test %>%
363
  gt() %>%
364
  gt_theme_tim() %>%
365
  fmt_number(columns = `Avg EV`:`Max EV`,decimals = 1) %>%
 
376
  )
377
  })
378
  output$PitchFilterP <- render_gt({
379
+ test %>%
380
  filter(PitcherAndTeam == input$player) %>%
381
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
382
  group_by(AutoPitchType) %>%
 
384
  Pitches = n(),
385
  # BBE = sum(BBE,na.rm = TRUE),
386
  "Usage%" = n() / nrow(.), # Added Usage% calculation
387
+ "Swings" = sum(Swing,na.rm = TRUE),
388
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
389
  "SwStr%" = mean(Whiff,na.rm = TRUE),
390
  "CSW%" = mean(CSW, na.rm = TRUE),
 
427
  )
428
  })
429
  output$PitchSideFilterP <- render_gt({
430
+ test %>%
431
  filter(PitcherAndTeam == input$player) %>%
432
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
433
  group_by(BatterSide) %>%
 
438
  Pitches = n(),
439
  #BBE = sum(BBE,na.rm = TRUE),
440
  "Usage%" = (n() / first(total_side)),
441
+ "Swings" = sum(Swing,na.rm = TRUE),
442
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
443
  "SwStr%" = mean(Whiff,na.rm = TRUE),
444
  "CSW%" = mean(CSW, na.rm = TRUE),
 
482
  )
483
  })
484
  output$InningFilterP <- render_gt({
485
+ test %>% filter(PitcherAndTeam == input$player) %>% group_by(Inning) %>%
486
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
487
  summarise(
488
  Pitches = n(),
489
  #BBE = sum(BBE,na.rm = TRUE),
490
+ "Swings" = sum(Swing,na.rm = TRUE),
491
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
492
  "SwStr%" = mean(Whiff,na.rm = TRUE),
493
  "CSW%" = mean(CSW,na.rm = TRUE),
 
530
  summarise(
531
  Pitches = n(),
532
  #BBE = sum(BBE,na.rm = TRUE),
533
+ "Swings" = sum(Swing,na.rm = TRUE),
534
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
535
  "SwStr%" = mean(Whiff,na.rm = TRUE),
536
  "CSW%" = mean(CSW,na.rm = TRUE),
 
557
  summarise(
558
  Pitches = n(),
559
  #BBE = sum(BBE,na.rm = TRUE),
560
+ "Swings" = sum(Swing,na.rm = TRUE),
561
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
562
  "SwStr%" = mean(Whiff,na.rm = TRUE),
563
  "CSW%" = mean(CSW,na.rm = TRUE),
 
599
 
600
  })
601
  output$slashlineP <- render_gt({
602
+ test %>% filter(PitcherAndTeam == input$player) %>%
603
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
604
  summarise(
605
  Pitches = n(),
 
624
  })
625
 
626
  output$CountFilterB <- render_gt({
627
+ t <- test %>% filter(BatterAndTeam == input$player) %>% group_by(Count) %>%
628
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
629
  summarise(
630
  Pitches = n(),
631
  #BBE = sum(BBE,na.rm = TRUE),
632
+ "Swings" = sum(Swing,na.rm = TRUE),
633
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
634
  "SwStr%" = mean(Whiff,na.rm = TRUE),
635
  "CSW%" = mean(CSW,na.rm = TRUE),
 
650
  sum(PA,na.rm = TRUE),digits = 3),
651
  "SLG" = (round(sum(Single,na.rm = TRUE) + sum(Double,na.rm = TRUE) * 2 +
652
  sum(Triple,na.rm = TRUE) * 3 + sum(HR,na.rm = TRUE)))/sum(AB,na.rm = TRUE))%>%
653
+ ungroup()
654
+ tt <- test %>% mutate(Count = BSituation) %>% filter(BatterAndTeam == input$player) %>% group_by(Count) %>%
655
+ filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
656
+ summarise(
657
+ Pitches = n(),
658
+ #BBE = sum(BBE,na.rm = TRUE),
659
+ "Swings" = sum(Swing,na.rm = TRUE),
660
+ "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
661
+ "SwStr%" = mean(Whiff,na.rm = TRUE),
662
+ "CSW%" = mean(CSW,na.rm = TRUE),
663
+ "Zone%" = mean(Zone,na.rm = TRUE),
664
+ "ZCon%" = mean(Contact[Zone == TRUE & Swing == TRUE],na.rm = TRUE),
665
+ "ZSwing%" = mean(Swing[Zone == TRUE],na.rm = TRUE),
666
+ "OCon%" = mean(Contact[Zone == FALSE & Swing == TRUE],na.rm = TRUE),
667
+ "OSwing%" = mean(Swing[Zone == FALSE],na.rm = TRUE),
668
+ "Avg EV" = mean(ExitSpeed[BBE == TRUE],na.rm = TRUE),
669
+ "EV90" = quantile(ExitSpeed[BBE == TRUE],.9,na.rm = TRUE),
670
+ "Max EV" = max(ExitSpeed[BBE == TRUE],na.rm = TRUE),
671
+ "Max EV" = ifelse(is.infinite(`Max EV`),NA,`Max EV`),
672
+ "GB%" = mean(GB[BBE == TRUE],na.rm = TRUE),
673
+ "LD%" = mean(LD[BBE == TRUE],na.rm = TRUE),
674
+ "FB%" = mean(FB[BBE == TRUE],na.rm = TRUE),
675
+ "AVG" = round(sum(Hit,na.rm = TRUE) / sum(AB,na.rm = TRUE),digits = 3),
676
+ "OBP" = round((sum(Hit,na.rm = TRUE) + sum(Walk,na.rm = TRUE) + sum(HBP,na.rm = TRUE))/
677
+ sum(PA,na.rm = TRUE),digits = 3),
678
+ "SLG" = (round(sum(Single,na.rm = TRUE) + sum(Double,na.rm = TRUE) * 2 +
679
+ sum(Triple,na.rm = TRUE) * 3 + sum(HR,na.rm = TRUE)))/sum(AB,na.rm = TRUE))%>%
680
+ ungroup()
681
+
682
+ test <- rbind(tt,t)
683
+ test %>%
684
  gt() %>%
685
  gt_theme_tim() %>%
686
  fmt_number(columns = `Avg EV`:`Max EV`,decimals = 1) %>%
 
697
  )
698
  })
699
  output$PitchFilterB <- render_gt({
700
+ test %>%
701
  filter(BatterAndTeam == input$player) %>%
702
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
703
  group_by(AutoPitchType) %>%
 
705
  Pitches = n(),
706
  # BBE = sum(BBE,na.rm = TRUE),
707
  "Pitch%" = n() / nrow(.), # Added Pitch% calculation
708
+ "Swings" = sum(Swing,na.rm = TRUE),
709
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
710
  "SwStr%" = mean(Whiff,na.rm = TRUE),
711
  "CSW%" = mean(CSW, na.rm = TRUE),
 
748
  )
749
  })
750
  output$PitchSideFilterB <- render_gt({
751
+ test %>%
752
  filter(BatterAndTeam == input$player) %>%
753
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
754
  group_by(PitcherThrows) %>%
 
759
  Pitches = n(),
760
  #BBE = sum(BBE,na.rm = TRUE),
761
  "Pitch%" = (n() / first(total_side)),
762
+ "Swings" = sum(Swing,na.rm = TRUE),
763
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
764
  "SwStr%" = mean(Whiff,na.rm = TRUE),
765
  "CSW%" = mean(CSW, na.rm = TRUE),
 
803
  )
804
  })
805
  output$InningFilterB <- render_gt({
806
+ test %>% filter(BatterAndTeam == input$player) %>% group_by(Inning) %>%
807
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
808
  summarise(
809
  Pitches = n(),
810
  #BBE = sum(BBE,na.rm = TRUE),
811
+ "Swings" = sum(Swing,na.rm = TRUE),
812
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
813
  "SwStr%" = mean(Whiff,na.rm = TRUE),
814
  "CSW%" = mean(CSW,na.rm = TRUE),
 
851
  summarise(
852
  Pitches = n(),
853
  #BBE = sum(BBE,na.rm = TRUE),
854
+ "Swings" = sum(Swing,na.rm = TRUE),
855
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
856
  "SwStr%" = mean(Whiff,na.rm = TRUE),
857
  "CSW%" = mean(CSW,na.rm = TRUE),
 
878
  summarise(
879
  Pitches = n(),
880
  #BBE = sum(BBE,na.rm = TRUE),
881
+ "Swings" = sum(Swing,na.rm = TRUE),
882
  "Whiff%" = mean(Whiff[Swing == TRUE],na.rm = TRUE),
883
  "SwStr%" = mean(Whiff,na.rm = TRUE),
884
  "CSW%" = mean(CSW,na.rm = TRUE),
 
920
 
921
  })
922
  output$slashlineB <- render_gt({
923
+ test %>% filter(BatterAndTeam == input$player) %>%
924
  filter(between(as.Date(Date),input$date[1],input$date[2])) %>%
925
  summarise(
926
  Pitches = n(),
 
944
  )
945
  })
946
 
947
+
948
+
949
  }
950
 
951
  # Run the application