Skip to content

Instantly share code, notes, and snippets.

@bayesball
Created August 31, 2014 02:02
Show Gist options
  • Select an option

  • Save bayesball/233ace6283318dadc23a to your computer and use it in GitHub Desktop.

Select an option

Save bayesball/233ace6283318dadc23a to your computer and use it in GitHub Desktop.
Adjusted Range Factors for MLB 2nd Basemen
library(Lahman)
library(dplyr)
fielding.2b <- filter(Fielding, POS=="2B", yearID >= 1960)
rf.season.2b <- summarize(group_by(fielding.2b, yearID),
RF.9 = 9 * (sum(PO, na.rm=TRUE) +
sum(A, na.rm=TRUE)) /
(sum(InnOuts / 3, na.rm=TRUE)))
library(ggplot2)
ggplot(rf.season.2b, aes(yearID, RF.9)) + geom_point() +
geom_smooth(span=.2, method="loess")
fielding.2b <- summarize(group_by(fielding.2b, playerID, yearID),
PO = sum(PO), A = sum(A),
InnOuts = sum(InnOuts))
summary.2b <- summarize(group_by(fielding.2b, playerID),
PO.A = sum(PO) + sum(A))
fielding.2b <- merge(fielding.2b, summary.2b,
by="playerID")
fielding.2b <- filter(fielding.2b, PO.A >= 1000)
fielding.2b <- mutate(fielding.2b,
Range = 9 * (PO + A) / (InnOuts / 3))
fielding.2b <- merge(fielding.2b, rf.season.2b, by="yearID")
fielding.2b <- mutate(fielding.2b,
Adj.Range = Range / RF.9)
head(fielding.2b)
plot.range <- function(name){
N <- strsplit(name, " ")[[1]]
pid <- filter(Master,
nameFirst==N[1],
nameLast==N[2])$playerID
player.data <- filter(fielding.2b, playerID==pid)
print(ggplot(player.data, aes(yearID, Adj.Range)) +
geom_point(size=4, color="red") +
geom_smooth(method="loess", size=2) +
geom_hline(yintercept=1, size=2, color="brown") +
labs(title=name) +
theme(plot.title = element_text(size = rel(3))))
}
plot.range("Chase Utley")
plot.range("Joe Morgan")
plot.range("Craig Biggio")
plot.range("Bobby Grich")
plot.range("Jose Oquendo")
plot.range("Manny Trillo")
plot.range("Frank White")
plot.range("Willie Randolph")
plot.range("Harold Reynolds")
plot.range("Glenn Hubbard")
plot.range("Bill Mazeroski")
plot.range("Ryne Sandberg")
plot.range("Roberto Alomar")
plot.range("Jeff Kent")
plot.range("Lou Whitaker")
plot.range("Dan Uggla")
plot.range("Robinson Cano")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment