For decades many people considered (and still consider) Babe Ruth to be the greatest all-around baseball player, because he was a star pitcher and a star hitter. The counter-argument to the Mantle "what-if" is: what if Ruth had not spent his first six years as a pitcher and instead had been a full-time hitter? (Similarly, what if Ted Williams had not spent some of his prime years in the military.)
Nowadays Shohei Ohtani is certainly a once-in-a-generation two-way star. However, he spent his early prime years in Japan's professional baseball, and he may not have enough time left in US baseball to amass these historic lifetime stats. Aaron Judge is another exceptional modern hitter; hopefully, he stays healthy so we can watch his career numbers climb.
To compare Mantle and Ruth’s lifetime stats objectively, I turned to data. The Sean Lahman baseball dataset contains Major League player stats back to 1871, and is available in the R library lahman. This was a good opportunity to practice data manipulation using dplyr.
Ruth played 102 more games than Mantle over a 22-year career (2,503 versus 2,401). His lifetime statistics eclipse Mantle's in every offensive category except stolen bases — though Ruth did steal home 10 times and hit nearly twice as many triples, suggesting he was faster than most realize. His lifetime batting average was an impressive .342, sitting just behind Tris Speaker and Ted Williams.
Lineup protection played a massive role for both men. Ruth generally batted directly before Lou Gehrig, and Mantle batted directly before Yogi Berra. While both Ruth and Mantle drew plenty of walks, presumably pitchers rarely chose to walk them intentionally just to face Gehrig or Berra.
I was also curious about their defensive metrics. For a fair comparison, I filtered the data to isolate only their outfield appearances. There is no value in comparing an outfield throw to an assist Ruth made on a comeback grounder while pitching. Similarly, I excluded Mantle's infield appearances; he primarily played first base in his final two seasons and filled in briefly at other infield spots early in his career.
Ruth played 222 more outfield games than Mantle (2,241 versus 2,019). Their total outfield putouts were nearly identical, likely because Mantle played centerfield and covered more ground. However, Ruth recorded nearly twice as many outfield assists (204 versus 117), which aligns with the arm strength expected of a former pitcher. While Ruth's 204 assists don't match stars such as Roberto Clemente's 266, it remains a highly respectable number.
Ultimately, the data shows that even if you completely ignore his pitching career, Babe Ruth built an outstanding, standalone career as both a hitter and a fielder.
MANTLE RUTH
games 2401 2503
at_bats 8102 8398
runs 1677 2174
hits 2415 2873
doubles 344 506
triples 72 136
home_runs 536 714
BA 0.298 0.342
rbi 1509 2217
sb 153 123
bb 1733 2062
so 1710 1330
games_of 2019 2241
putouts 4438 4444
assists 117 204
Here is my R code:
library(Lahman)
library(tidyverse)
data(People)
which(People$nameLast == "Mantle") # 11773, playerID = mantlmi01
which(People$nameLast == "Ruth") # 16674 , playerID = ruthba01
data(Batting)
data(Fielding) # for fielding, want games in outfield POS == 'OF'
df_fielding <- Fielding %>%
filter(playerID %in% c('mantlmi01', 'ruthba01'), POS == 'OF') %>%
group_by(playerID) %>%
summarize(games_of = sum(G, na.rm = TRUE), putouts = sum(PO, na.rm = TRUE),
assists = sum(A, na.rm = TRUE)
)
df <- Batting %>%
filter(playerID %in% c('mantlmi01', 'ruthba01')) %>%
group_by(playerID) %>%
summarize(games = sum(G, na.rm = TRUE), at_bats = sum(AB, na.rm = TRUE),
runs = sum(R, na.rm = TRUE), hits = sum(H, na.rm = TRUE),
doubles = sum(X2B, na.rm = TRUE),
triples = sum(X3B, na.rm = TRUE), home_runs = sum(HR, na.rm = TRUE),
BA = round(hits / at_bats,3),
rbi = sum(RBI, na.rm = TRUE), sb = sum(SB, na.rm = TRUE),
bb = sum(BB, na.rm = TRUE), so = sum(SO, na.rm = TRUE),
) %>%
merge(df_fielding, by = "playerID", all.x = TRUE)
df_transposed <- as.data.frame(t(df))
colnames(df_transposed) <- c("MANTLE", "RUTH")
df_transposed <- df_transposed[-1, ]
df_transposed
End

No comments:
Post a Comment