
Managers table
Managers.RdManagers table: information about individual team managers, teams they managed and some basic statistics for those teams in each year.
Usage
data(Managers)Format
A data frame with 4410 observations on the following 10 variables.
playerIDManager (player) ID code
yearIDYear
teamIDTeam; a factor
lgIDLeague; a factor with levels
AAALFLNLPLUAinseasonManagerial order. Zero if the individual managed the team the entire year. Otherwise denotes where the manager appeared in the managerial order (1 for first manager, 2 for second, etc.)
GGames managed
WWins
LLosses
rankTeam's final position in standings that year
plyrMgrPlayer Manager (denoted by 'Y'); a factor with levels
NY
Source
Lahman, S. (2026) Lahman's Baseball Database, 1871-2025, 2026 version, https://sabr.org/lahman-database/
Examples
####################################
# Basic career summaries by manager
####################################
library("dplyr")
mgrSumm <- Managers %>%
group_by(playerID) %>%
summarise(nyear = length(unique(yearID)),
yearBegin = min(yearID),
yearEnd = max(yearID),
nTeams = length(unique(teamID)),
nfirst = sum(rank == 1L),
W = sum(W),
L = sum(L),
WinPct = round(W/(W + L), 3))
MgrInfo <- People %>%
filter(!is.na(playerID)) %>%
select(playerID, nameLast, nameFirst)
# Merge names into the table
mgrTotals <- right_join(MgrInfo, mgrSumm, by = "playerID")
# add total games managed
mgrTotals <- mgrTotals %>%
mutate(games = W + L)
##########################
# Some basic queries
##########################
# Top 20 managers in terms of years of service:
mgrTotals %>%
arrange(desc(nyear)) %>%
head(., 20)
#> playerID nameLast nameFirst nyear yearBegin yearEnd nTeams nfirst W
#> 1 mackco01 Mack Connie 53 1894 1950 2 9 3731
#> 2 larusto01 LaRussa Tony 35 1979 2022 3 14 2898
#> 3 mcgrajo01 McGraw John 33 1899 1932 3 11 2763
#> 4 coxbo01 Cox Bobby 29 1978 2010 2 15 2497
#> 5 harribu01 Harris Bucky 29 1924 1956 5 3 2158
#> 6 torrejo01 Torre Joe 29 1977 2010 5 13 2322
#> 7 bochybr01 Bochy Bruce 28 1995 2025 3 6 2250
#> 8 tayloca99 Taylor Candy Jim 27 1920 1947 15 3 1023
#> 9 andersp01 Anderson Sparky 26 1970 1995 2 7 2194
#> 10 bakerdu01 Baker Dusty 26 1993 2023 5 10 2169
#> 11 mauchge01 Mauch Gene 26 1960 1987 4 2 1902
#> 12 mckecbi01 McKechnie Bill 25 1915 1946 5 4 1896
#> 13 stengca01 Stengel Casey 25 1934 1965 4 10 1905
#> 14 durocle01 Durocher Leo 24 1939 1973 4 3 2008
#> 15 francte01 Francona Terry 24 1997 2025 4 5 1988
#> 16 mccarjo99 McCarthy Joe 24 1926 1950 3 9 2125
#> 17 alstowa01 Alston Walter 23 1954 1976 2 7 2040
#> 18 melvibo01 Melvin Bob 23 2000 2025 6 4 1682
#> 19 pinielo01 Piniella Lou 23 1986 2010 5 6 1827
#> 20 wrighha01 Wright Harry 23 1871 1893 4 6 1225
#> L WinPct games
#> 1 3948 0.486 7679
#> 2 2509 0.536 5407
#> 3 1948 0.586 4711
#> 4 1999 0.555 4496
#> 5 2219 0.493 4377
#> 6 1995 0.538 4317
#> 7 2265 0.498 4515
#> 8 1070 0.489 2093
#> 9 1834 0.545 4028
#> 10 1858 0.539 4027
#> 11 2037 0.483 3939
#> 12 1723 0.524 3619
#> 13 1842 0.508 3747
#> 14 1709 0.540 3717
#> 15 1705 0.538 3693
#> 16 1333 0.615 3458
#> 17 1613 0.558 3653
#> 18 1592 0.514 3274
#> 19 1709 0.517 3536
#> 20 885 0.581 2110
# Top 20 winningest managers (500 games minimum)
mgrTotals %>%
filter((W + L) >= 500) %>%
arrange(desc(WinPct)) %>%
head(., 20)
#> playerID nameLast nameFirst nyear yearBegin yearEnd nTeams nfirst W
#> 1 harrivi02 Harris Vic 11 1936 1948 1 8 617
#> 2 fosteru99 Foster Rube 20 1907 1926 2 11 701
#> 3 roberda07 Roberts Dave 11 2015 2025 2 9 944
#> 4 mccarjo99 McCarthy Joe 24 1926 1950 3 9 2125
#> 5 mutriji99 Mutrie Jim 9 1883 1891 2 3 658
#> 6 comisch01 Comiskey Charlie 12 1883 1894 3 4 840
#> 7 seleefr99 Selee Frank 16 1890 1905 2 5 1284
#> 8 southbi01 Southworth Billy 13 1929 1951 2 4 1044
#> 9 chancfr01 Chance Frank 11 1905 1923 3 4 946
#> 10 mcgrajo01 McGraw John 33 1899 1932 3 11 2763
#> 11 booneaa01 Boone Aaron 8 2018 2025 1 3 697
#> 12 lopezal01 Lopez Al 17 1951 1969 2 2 1410
#> 13 weaveea99 Weaver Earl 17 1968 1986 1 6 1480
#> 14 cochrmi01 Cochrane Mickey 5 1934 1938 1 2 348
#> 15 wrighha01 Wright Harry 23 1871 1893 4 6 1225
#> 16 ansonca01 Anson Cap 21 1875 1898 3 5 1296
#> 17 dyered01 Dyer Eddie 5 1946 1950 1 1 446
#> 18 rowlapa99 Rowland Pants 4 1915 1918 1 1 339
#> 19 thomsro99 Thomson Rob 5 2008 2025 2 2 347
#> 20 clarkfr01 Clarke Fred 19 1897 1915 2 4 1602
#> L WinPct games
#> 1 303 0.671 920
#> 2 374 0.652 1075
#> 3 576 0.621 1520
#> 4 1333 0.615 3458
#> 5 419 0.611 1077
#> 6 541 0.608 1381
#> 7 862 0.598 2146
#> 8 704 0.597 1748
#> 9 648 0.593 1594
#> 10 1948 0.586 4711
#> 11 496 0.584 1193
#> 12 1004 0.584 2414
#> 13 1060 0.583 2540
#> 14 250 0.582 598
#> 15 885 0.581 2110
#> 16 947 0.578 2243
#> 17 325 0.578 771
#> 18 247 0.578 586
#> 19 253 0.578 600
#> 20 1181 0.576 2783
# Most of these are 19th century managers.
# How about the modern era?
mgrTotals %>%
filter(yearBegin >= 1901 & (W + L) >= 500) %>%
arrange(desc(WinPct)) %>%
head(., 20)
#> playerID nameLast nameFirst nyear yearBegin yearEnd nTeams nfirst W
#> 1 harrivi02 Harris Vic 11 1936 1948 1 8 617
#> 2 fosteru99 Foster Rube 20 1907 1926 2 11 701
#> 3 roberda07 Roberts Dave 11 2015 2025 2 9 944
#> 4 mccarjo99 McCarthy Joe 24 1926 1950 3 9 2125
#> 5 southbi01 Southworth Billy 13 1929 1951 2 4 1044
#> 6 chancfr01 Chance Frank 11 1905 1923 3 4 946
#> 7 booneaa01 Boone Aaron 8 2018 2025 1 3 697
#> 8 lopezal01 Lopez Al 17 1951 1969 2 2 1410
#> 9 weaveea99 Weaver Earl 17 1968 1986 1 6 1480
#> 10 cochrmi01 Cochrane Mickey 5 1934 1938 1 2 348
#> 11 dyered01 Dyer Eddie 5 1946 1950 1 1 446
#> 12 rowlapa99 Rowland Pants 4 1915 1918 1 1 339
#> 13 thomsro99 Thomson Rob 5 2008 2025 2 2 347
#> 14 duncafr02 Duncan Frank 6 1942 1947 1 2 337
#> 15 welchwi01 Welch Winfield 6 1941 1948 2 1 300
#> 16 snowfe01 Snow Felton 8 1939 1947 2 0 331
#> 17 johnsda02 Johnson Davey 17 1984 2013 5 6 1369
#> 18 moranpa01 Moran Pat 9 1915 1923 2 2 748
#> 19 shildmi99 Shildt Mike 6 2018 2025 2 1 435
#> 20 oneilst01 O'Neill Steve 14 1935 1954 4 1 1040
#> L WinPct games
#> 1 303 0.671 920
#> 2 374 0.652 1075
#> 3 576 0.621 1520
#> 4 1333 0.615 3458
#> 5 704 0.597 1748
#> 6 648 0.593 1594
#> 7 496 0.584 1193
#> 8 1004 0.584 2414
#> 9 1060 0.583 2540
#> 10 250 0.582 598
#> 11 325 0.578 771
#> 12 247 0.578 586
#> 13 253 0.578 600
#> 14 257 0.567 594
#> 15 229 0.567 529
#> 16 255 0.565 586
#> 17 1070 0.561 2439
#> 18 586 0.561 1334
#> 19 340 0.561 775
#> 20 821 0.559 1861
# Top 10 managers in terms of percentage of titles
# (league or divisional) - should bias toward managers
# post-1970 since more first place finishes are available
mgrTotals %>%
filter(yearBegin >= 1901 & (W + L) >= 500) %>%
arrange(desc(round(nfirst/nyear, 3))) %>%
head(., 10)
#> playerID nameLast nameFirst nyear yearBegin yearEnd nTeams nfirst W L
#> 1 roberda07 Roberts Dave 11 2015 2025 2 9 944 576
#> 2 dierkla01 Dierker Larry 5 1997 2001 1 4 435 348
#> 3 harrivi02 Harris Vic 11 1936 1948 1 8 617 303
#> 4 howsedi01 Howser Dick 8 1978 1986 2 5 507 425
#> 5 freyji99 Frey Jim 5 1980 1986 2 3 323 287
#> 6 fosteru99 Foster Rube 20 1907 1926 2 11 701 374
#> 7 coxbo01 Cox Bobby 29 1978 2010 2 15 2497 1999
#> 8 banisje01 Banister Jeff 4 2015 2018 1 2 325 313
#> 9 brenlbo01 Brenly Bob 4 2001 2004 1 2 303 262
#> 10 kenneke99 Kennedy Kevin 4 1993 1996 2 2 309 273
#> WinPct games
#> 1 0.621 1520
#> 2 0.556 783
#> 3 0.671 920
#> 4 0.544 932
#> 5 0.530 610
#> 6 0.652 1075
#> 7 0.555 4496
#> 8 0.509 638
#> 9 0.536 565
#> 10 0.531 582
# How about pre-1969?
mgrTotals %>%
filter(yearBegin >= 1901 & yearEnd <= 1969 &
(W + L) >= 500) %>%
arrange(desc(round(nfirst/nyear, 3))) %>%
head(., 10)
#> playerID nameLast nameFirst nyear yearBegin yearEnd nTeams nfirst W
#> 1 harrivi02 Harris Vic 11 1936 1948 1 8 617
#> 2 fosteru99 Foster Rube 20 1907 1926 2 11 701
#> 3 cochrmi01 Cochrane Mickey 5 1934 1938 1 2 348
#> 4 stengca01 Stengel Casey 25 1934 1965 4 10 1905
#> 5 lloydpo99 Lloyd John Henry 18 1911 1931 9 7 426
#> 6 mccarjo99 McCarthy Joe 24 1926 1950 3 9 2125
#> 7 chancfr01 Chance Frank 11 1905 1923 3 4 946
#> 8 huggimi01 Huggins Miller 17 1913 1929 2 6 1413
#> 9 colliji01 Collins Jimmy 6 1901 1906 1 2 455
#> 10 duncafr02 Duncan Frank 6 1942 1947 1 2 337
#> L WinPct games
#> 1 303 0.671 920
#> 2 374 0.652 1075
#> 3 250 0.582 598
#> 4 1842 0.508 3747
#> 5 361 0.541 787
#> 6 1333 0.615 3458
#> 7 648 0.593 1594
#> 8 1134 0.555 2547
#> 9 376 0.548 831
#> 10 257 0.567 594
## Tony LaRussa's managerial record by team
Managers %>%
filter(playerID == "larusto01") %>%
group_by(teamID) %>%
summarise(nyear = length(unique(yearID)),
yearBegin = min(yearID),
yearEnd = max(yearID),
games = sum(G),
nfirst = sum(rank == 1L),
W = sum(W),
L = sum(L),
WinPct = round(W/(W + L), 3))
#> # A tibble: 3 × 9
#> teamID nyear yearBegin yearEnd games nfirst W L WinPct
#> <fct> <int> <int> <int> <int> <int> <int> <int> <dbl>
#> 1 CHA 10 1979 2022 1357 2 695 659 0.513
#> 2 OAK 10 1986 1995 1471 4 798 673 0.542
#> 3 SLN 16 1996 2011 2582 8 1405 1177 0.544
##############################################
# Density plot of the number of games managed:
##############################################
library("ggplot2")
ggplot(mgrTotals, aes(x = games)) +
geom_density(fill = "red", alpha = 0.3) +
labs(x = "Number of games managed")
# Who managed more than 4000 games?
mgrTotals %>%
filter(W + L >= 4000) %>%
arrange(desc(W + L))
#> playerID nameLast nameFirst nyear yearBegin yearEnd nTeams nfirst W L
#> 1 mackco01 Mack Connie 53 1894 1950 2 9 3731 3948
#> 2 larusto01 LaRussa Tony 35 1979 2022 3 14 2898 2509
#> 3 mcgrajo01 McGraw John 33 1899 1932 3 11 2763 1948
#> 4 bochybr01 Bochy Bruce 28 1995 2025 3 6 2250 2265
#> 5 coxbo01 Cox Bobby 29 1978 2010 2 15 2497 1999
#> 6 harribu01 Harris Bucky 29 1924 1956 5 3 2158 2219
#> 7 torrejo01 Torre Joe 29 1977 2010 5 13 2322 1995
#> 8 andersp01 Anderson Sparky 26 1970 1995 2 7 2194 1834
#> 9 bakerdu01 Baker Dusty 26 1993 2023 5 10 2169 1858
#> WinPct games
#> 1 0.486 7679
#> 2 0.536 5407
#> 3 0.586 4711
#> 4 0.498 4515
#> 5 0.555 4496
#> 6 0.493 4377
#> 7 0.538 4317
#> 8 0.545 4028
#> 9 0.539 4027
# Connie Mack's advantage: he owned the Philadelphia A's :)
# Table of Tony LaRussa's team finishes (rank order):
Managers %>%
filter(playerID == "larusto01") %>%
count(rank)
#> rank n
#> 1 1 14
#> 2 2 4
#> 3 3 8
#> 4 4 5
#> 5 5 4
#> 6 7 1
##############################################
# Scatterplot of winning percentage vs. number
# of games managed (min 100)
##############################################
ggplot(subset(mgrTotals, yearBegin >= 1900 & games >= 100),
aes(x = games, y = WinPct)) +
geom_point() + geom_smooth() +
labs(x = "Number of games managed")
#> `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
############################################
# Division titles
############################################
# Plot of number of first place finishes by managers who
# started in the divisional era (>= 1969) with
# at least 8 years of experience
mgrTotals %>%
filter(yearBegin >= 1969 & nyear >= 8) %>%
ggplot(., aes(x = nyear, y = nfirst)) +
geom_point(position = position_jitter(width = 0.2)) +
labs(x = "Number of years",
y = "Number of divisional titles") +
geom_smooth()
#> `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
# Change response to proportion of titles relative
# to years managed
mgrTotals %>%
filter(yearBegin >= 1969 & nyear >= 8) %>%
ggplot(., aes(x = nyear, y = round(nfirst/nyear, 3))) +
geom_point(position = position_jitter(width = 0.2)) +
labs(x = "Number of years",
y = "Proportion of divisional titles") +
geom_smooth()
#> `geom_smooth()` using method = 'loess' and formula = 'y ~ x'