All-Star or Not?
All Data as of 07/07/2025
The all-stars have been picked! Lets decide if the voters made the right decision. I will go through each position and use stats to decide which players deserve to make the list.
options(warn = -1)
library(readr)
library(dplyr)
library(tidyr)
library(stringr)
library(ggplot2)
library(readxl)
library(stringi) # Added this line to load the stringi package
mlb_players_2025 <- read_xlsx("MLB Database(AutoRecovered).xlsx", sheet = 16) %>%
mutate(Name2 = stri_trans_general(Name, id = "Latin-ASCII")) %>%
select(-Name) %>%
rename(Name = Name2)
mlb_savant_2025 <- read.csv("stats (22).csv") %>%
rename(Name = last_name..first_name) %>%
separate(Name, into = c("Last", "First"), sep = ", ") %>%
mutate(Name = paste(First, Last, sep = " ")) %>%
mutate(Name2 = stri_trans_general(Name, id = "Latin-ASCII")) %>%
select(-Name) %>%
rename(Name = Name2)
mlb_batters_continued <- read_xlsx("MLB Database(AutoRecovered).xlsx", sheet = 17)
mlb_players_2025 <- mlb_players_2025 %>%
left_join(mlb_savant_2025, by = "Name") %>%
left_join(mlb_batters_continued, by = "Name")
mlb_batters_fixed <- read_xlsx("MLB Database(AutoRecovered).xlsx", sheet = 19) %>%
mutate(Name2 = stri_trans_general(Name, id = "Latin-ASCII")) %>%
select(-Name) %>%
rename(Name = Name2)
mlb_players_2025 <- mlb_players_2025 %>%
left_join(mlb_batters_fixed, by = "Name")
batters_with_positions <- read.csv("mlb-player-stats-Batters.csv") %>%
select(Player, Pos, Age) %>%
rename("Name" = Player) %>%
mutate(Name = ifelse(Name == 'Bobby Witt', paste("Bobby Witt Jr."), Name)) %>%
mutate(Name = ifelse(Name == 'Fernando Tatis', paste("Fernando Tatis Jr."), Name)) %>%
mutate(Name = ifelse(Name == 'Ronald Acuna', paste("Ronald Acuna Jr."), Name)) %>%
mutate(Name = ifelse(Name == 'Jazz Chilholm Jr', paste("Jazz Chisholm Jr."), Name)) %>%
mutate(Name = ifelse(Name == 'Vladimir Guerrero', paste("Vladimir Guerrero Jr."), Name))
mlb_players_2025 <- mlb_players_2025 %>%
left_join(batters_with_positions, by = "Name") %>%
select(Name, Team, Pos, Age, G, WAR, PA, AB, AVG, OBP, SLG, OPS, everything()) %>%
select(-`Team.x`, -`Team.y`, -`#.x`, -Last, -First, -year, -player_id, -`#.y`)
all_star_batters <- mlb_players_2025 %>%
filter(str_detect(Name, paste(c("Judge", "Raleigh", "Vladimir", "Torres", "Caminero", "Greene", "Jose Ramirez", "Jacob Wilson", "Javier Baez", "Ryan O'Hearn", "Kirk", "Aranda", "Chisholm", "Maikel Garcia", "Brandon Lowe", "Isaac Paredes", "Zach McKinstry", "Jeremy Pena", "Bobby Witt", "Arozarena", "Buxton", "Kwan", "Julio Rod", "Brent Rooker", "Will Smith", "Freddie Freeman", "Ketel", "Machado", "Lindor", "Ronald Acu", "Crow-Armstrong", "Kyle Tucker", "Shohei", "Goodman", "Alonso", "Elly De La Cruz", "Brendan Donovan", "Matt Olson", "Eugenio", "Carroll", "Stowers", "Tatis", "James Wood", "Schwarber"), collapse = "|"))) %>%
mutate("All Star" = paste("Yes"))
non_all_star_batters <- mlb_players_2025 %>%
anti_join(all_star_batters, by = "Name") %>%
mutate("All Star" = paste("No"))
mlb_players_2025 <- all_star_batters %>%
union(non_all_star_batters) %>%
filter(PA > 275)
all_star_starters <- all_star_batters %>%
filter(str_detect(Name, paste(c("Judge", "Raleigh", "Vladimir", "Torres", "Caminero", "Greene", "Jose Ramirez", "Jacob Wilson", "Javier Baez", "Ryan O'Hearn", "Will Smith", "Freddie Freeman", "Ketel", "Machado", "Lindor", "Ronald Acu", "Crow-Armstrong", "Kyle Tucker", "Shohei"), collapse = "|")))Catchers
Cal Raleigh, Alejandro Kirk, Will Smith, Hunter Goodman
library(dplyr)
mlb_players_2025 %>%
filter(Pos == "C", AB > 200) %>%
arrange(desc(WAR))
all_star_batters %>%
filter(Pos == "C")If an all-star game requires that there should be two catchers to a team. Were the best two catchers from each league selected?
Yes, the four catchers selected lead their position in OPS. Honorable mentions goes to Willson Contrares and Austin Wells. Contrares has not played enough catcher this year and Wells does not provide enough offense to make the team. Catcher was probabily the easiest position to fill the quota. Hunter Goodman was a great choice to make the team since he has been on a tear lately and boasts a .281/.326/.516 slash line. These are numbers that make you an all-star 9 years out of ten. Also, Alejandro Kirk is having the best year of his career, batting above .300 and has only struck out fifteen times this year. He deserved the all-star guaranteed. Cal Raleigh 150% deserves to be an all-star this year. He has the most homeruns by a catcher before the all-star break, the second most homeruns ever before the all-star break, and currently the most WAR amongst catchers (its not even close). Lastly, Will Smith is a surprising pick given that he has only had 106 ABs at the time of his selection. With his .332/.433/.560 slash line, he's guaranteed. His average is ridiculous and he is playing for a team that will most likely make the World Series again.
First Basemen
Vladimir Guerrero Jr., Jonathan Aranda, Freddie Freeman, Matt Olson and Pete Alonso
mlb_players_2025 %>%
filter(Pos == "1B", AB > 200) %>%
arrange(desc(OPS))
all_star_batters %>%
filter(Pos == "1B")Let me get this out of the way right now. MICHAEL BUSCH SHOULD BE AN ALL STAR! Yes, it is easy to be carried away by OPS as a means to evaluate a pitcher, however Busch leads all first basemen in OPS. He strikesout much less than his contemporaries and he has eleven homeruns. If I had to kick one of the all-star first basemen off the list to make space for Busch, it would have to be Olson. To his credit, he started the year quite unlucky, having batted near the mendoza line while his expected stats would suggest that he should be in the homerun race with Judge and Raleigh. For being quite unlucky to start and turning his stats around with consistant success at the plate, he definitely earns strong consideration. I would consider him at the DH spot, or at least consider Busch at the DH instead. I just do not believe that Olson has had the impressive season that Busch has had. Additionally, Olson's batting average is not all-star material. If he hit more homeruns then he's have a better case but given that the game is held in Atlanta, its no wonder why he got the edge. In this case, he deserves to be an all-star DH over Ryan O'Hearn but they both will be reconsidered.
Vladamir Guerrero Jr.: .279/.381/.442 OPS: .824, this is a really good slash line. But good enough? Thats debatable. His OPS is low compared to the others and he does not have as many homeruns as his competitors. H also does not play defense. I will have to reevaluate him.
Aranda and Freeman are two very similar players. Very high average, high batting average on balls in play, good singles hitters. These two are playing like the best on their team (lets act like Shohei doesn't exist for a moment), and they are incredibly reliable. Both players have hit walkoffs this year and both payers play on teams poised for the playoffs. Undebatable.
Lastly, Pete Alonso, arguable the most impressive of the first basemen who were selected. Leads the group in WAR, OPS, homeruns, and also plays on one of the best teams in the National League. Lets move on.
Second Basemen
Gleyber Torres, Ketel Marte, Brendan Donovan, Brandon Lowe, Jazz Chisholm
library(dplyr)
mlb_players_2025 %>%
filter(Pos == "2B", AB > 200)
all_star_batters %>%
filter(Pos == "2B")
all_star_batters %>%
filter(Name == "Jazz Chisholm Jr.")For a position that requires more defense than offense, this selection showed some tremendous offense this year? Are there players who play primarily second base that I believe should have made it? Not really. Jorge Polanco has been integral to the Seattle Mariners' success this year but he cooled off heavily in the second quarter of the year.
Ketel Marte: switch hitting monster is slashing .293/.396/.586. Even with an injury that sidelined him for a while, he still has the most homeruns at second base. Well, tied for second. Ketel, no question.
Brandon Lowe: Heading into the 2025 season, the success of the Tampa Bay Rays would depend on Brandon Lowe and if he would finally break into the power hitting slugging second basement that many thought he had in him. He has done just that. Nineteen home runs and fifty RBIs. He strikesout a ton but you can't paint a picture of the 2025 MLB season without including Lowe's overlooked season. He deserves it.
Gleyber Torres: Additionally, the Detroit Tigers have been the best team in the league largely due to the breakout of Gleyber Torres. 2.3 WAR, 0.810 OPS, never strikes out and plays for the best team, no question he deserves to start in the all-star game.
Brendan Donovan: Brendan Donovan is another sneaky selection. He boasted the highest batting average for most of the season thus far before falling back to normalcy. Still, he sitting around .300 avg, .800 OPS. If there is a quota to fill at 2nd base which requires the best two 2nd basement to be selected to the game, Donovan deserves to be there. Is he an all-star otherwise? Yes (Given the right context). He is a 2nd baseman, they shouldn't be your best hitters, yet for the Cardinals, he is. I support the decision. Reevaluate.
Jazz Chisholm Jr.: 15 homeruns, 10 SB on only 59 games says a lot! However, so does 69 strikeouts. Jazz is interesting because fans love him and he is a three true outcomes player who looks like a slap hitter. He's exciting but I do not think he deserves to be an all-star based strickly on his limited sample of games and his poor average.
Third Base
Jose Ramirez, Manny Machado, Junior Caminero, Maikel Garcia, Isaac Paredes, Zach McKinstry, and Eugenio Suárez
mlb_players_2025 %>%
filter(Pos == "3B", AB > 150) %>%
distinct(Name, .keep_all = TRUE) %>%
filter(Name != "Max Muncy") %>%
arrange(desc(WAR))
all_star_batters %>%
filter(Name %in% c("Jose Ramirez", "Manny Machado", "Junior Caminero", "Maikel Garcia", "Isaac Paredes", "Zach McKinstry", "Eugenio Suarez"))
all_star_battersLets start with a perplexing case. Rafael Devers. Normally an all-star, finds himself looking for votes for the National League's team when he spent most of the season on the Boston Red Sox, American League playoff hopeful. Does he deserve to make the all-star game? Maybe? Definitely not for 3B. He has rarely played the field this year and the third basemen he competes with are just too tough to edge out. Yes he has some great stats however plays horrible defense and really has not been dominant enough to earn the admission while playing less than a month in the league he's be representing.
Another perplexing case is Alex Bregman. In 50 games, he's been more impressive than most 3B. However, he was still on injury leave as the voting was wrapping up. Still, with 2.4 WAR in 51 games is extremely impressive. His OPS is higher than any other third baseman in the league and narratively speaking, him proving the Astros wrong and earning his contract value on a team that hopes to make a deep run in the playoffs for the first time in a decade helps his case. Unfortunately, the limited playing time is just too much to overcome.
Jose Ramirez deserves to be an all star. .297/.360/.484, 14 homeruns, never strikesout, fan favorite, 22 steals. Next...
Eugenio Suarez? He had a four homerun game, and a three homerun game, the shocking star on a offensive juggernaught Arizona Diamondbacks, and nobody saw it coming. He certainly earned the votes. He strikes out a ton but 28 homeruns? He must make the big game.
Manny Machado batted .288/.351/.474 with 14 homeruns playing more than most. These are all-star numbers. He deserves to be an all-star however I would have chosen Eugenio Suarez as the starter.
Zach McKinstry: .285/.356/.456 with an .812 OPS. This is really good for his standard. He's more of a utility guy so he should be considered as a reserve but with this slash line, he will have to be reevaluated.
Isaac Paredes: .257/.356/.467 slash line with an OPS of.824? Yes, he slugs pretty well but that batting average is not what you want to see. He's hit 18 homeruns and strikes out significantly less than most all stars. He will be reevaluated.
Maikel Garcia: .303/.361/.465 OPS: .826, barely walks and plays every day? There's not much a reason that he shouldn't make it with these numbers, right? Well... there is some extreme competition at this position and with his low HR total and lack of defense, he will be reevaluated.
Junior Caminero: Junior is an interesting case. He young and so much fun to watch on a Rays team that nobody saw coming. His 21 homeruns is amazing but his splits fall below every other third baseman in the selection. He will be reevaluated.