This is a graphic comparison of Average Draft Position (“ADP”) with the ranking of player selection in the 2015 Public House draft. The intent is to illustrate useful metric of player value (ADP) with how they were selected by team in the hopes of uncovering owner selection biases and criteria.
The process of gather and cleanging the is extensive. The data comes from multiple source. It requires special cleaning techniques.
### url <- "http://games.espn.go.com/ffl/livedraftresults"
### destfile <- "./ADP"
### download.file(url, destfile)
## Library all required packages
library(XML)
library(stringr)
library(data.table)
library(ggplot2)
library(gridExtra)
Create the average draft position dataframe.
## Read in the average draft position
adp <- readHTMLTable("ADP", trim = TRUE, as.data.frame = TRUE, stringsAsFactors = FALSE)
## Cleaning: redefine the list as a dataframe.
adp <- adp[[1]]
## Cleaning: remove extraneous rows, adjust names(), renumber rows
adp <- adp[4:204, ]
names(adp) <- adp[1,]
adp <- adp[-1,]
rownames(adp) <- 1:nrow(adp)
## Cleaning: regex to extract create TEAM and remove team from PLAYER column
adp$TEAM <- str_extract(adp$`PLAYER, TEAM`, '\\b[^,]+$')
adp$`PLAYER, TEAM` <- sub("(.*?),.*", "\\1", adp$`PLAYER, TEAM`)
names(adp)[2] <- 'PLAYER'
adp$PLAYER <- sub("[*]$", "", adp$PLAYER)
adp$TEAM <- gsub(" D/ST", "",adp$TEAM)
mapping <- c("Chargers"="SD", "Steelers"="Pit", "Panthers"="Car", "Bills"="Buf", "Bengals"="Cin", "Eagles"="Phi", "Cardinals"="Ari", "Dolphins"="Mia", "Cowboys"="Dal", "Packers"="GB","Lions"="Det", "Giants"="NYG", "Colts"="Ind", "49ers"="SF", "Texans"="Hou", "Redskins"="Wsh", "Rams"="LA", "Falcons"="Atl", "Raiders"="Oak", "Jaguars"="Jax", "Bears"="Chi", "Patriots"="NE", "Browns"="Cle", "Vikings"="Min", "Jets"="NYJ", "Ravens"="Bal", "Chiefs"="KC","Titans"="Ten", "Broncos"="Den", "Buccaneers"="TB", "Saints"="NO", "Seahawks"="Sea")
temp <- adp
temp$TEAM <- mapping[as.character(temp$TEAM)]
cond.adp <- is.na(temp$TEAM)
temp <- temp[!cond.adp,]
adp <- adp[cond.adp,]
adp <- rbind(adp,temp)
adp$RANK <- as.numeric(adp$RANK)
adp <- adp[with(adp, order(RANK)),]
adp.final <- with(adp, data.frame(RANK, PLAYER, POS, `AVG PICK`, stringsAsFactors = FALSE))
Create and clean the Public House League draft dataframe.
## Find the file name in the and assign it to a variable for reading
x <- grep("Draft Recap - Free Fantasy Football - ESPN.html", dir())
file <- dir()[x]
## Read draft data into list
dft <- readHTMLTable(file, trim = TRUE, as.data.frame = TRUE, stringsAsFactors = FALSE)
## subset to remove extraneous data
dft <- lapply(3:18, function(x){subset(dft[[x]][-1,])})
## coerce list to dataframe (remove data.table designation from class type)
dft <- rbindlist(dft)
dft <- as.data.frame(dft)
## Cleaning: set names, regex to remove extraneous characters and spaces
names(dft) <- c("ORDER", "PLAYER", "MANAGER")
dft$PLAYER <- gsub("\\,.*","",dft$PLAYER)
dft$PLAYER <- gsub(" D/ST D/ST", "D/ST", dft$PLAYER)
dft$PLAYER <- gsub("D/ST.+D/ST", "D/ST",dft$PLAYER)
dft$PLAYER <- gsub("\\s+$", "", dft$PLAYER)
## Cleaning: special fix to Packers D/ST
dft$PLAYER[179] <- "Packers D/ST"
Merge the average draft postion dataframe with the draft dataframe on PLAYER column.
## merge Draft data with average draft pick data
df <- merge(dft, adp.final, by = "PLAYER", all.x = TRUE)
## Cleaning: remove NAs for average pick and undrafted players
df$AVG.PICK[is.na(df$AVG.PICK)] <- 150
df$`MANAGER`[is.na(df$`MANAGER`)] <- "Undrafted"
## Cleaning: Coerce order to numeric and sort data on ORDER
df$ORDER <- as.numeric(df$ORDER)
df <- df[with(df, order(ORDER)),]
Download and clean the end of season rankings with total points on the season (leaders only).
## set up urls for data download from ESPN 2016 Porjections
## espn_base_url <- "http://games.espn.go.com/ffl/tools/projections?display=alt&startIndex="
## espn_pages <- as.character(seq(0,1770, 15))
## espn_urls <- paste0(espn_base_url, espn_pages)
## download pojections to local files
## lapply(1:length(espn_urls), function(x){download.file(url = espn_urls[x], destfile = paste0("projections", x))})
## Read files from download into memory
nums <- 1:119
proj_files <- paste0("projections", nums)
F.PROJ <- lapply(proj_files, function(x){readHTMLTable(x, as.data.frame=TRUE, stringsAsFactors=FALSE)})
## Cleaning : remove extraneaous dataframes
for(i in seq(F.PROJ)){
F.PROJ[[i]][[1]] <- NULL
}
## Cleaning: Insert Player name. Create fields for Player, Team and Position. Remove same from first field.
for(i in seq(F.PROJ)){
for(j in seq(F.PROJ[[i]])){
F.PROJ[[i]][[j]][[1]][1] <- names(F.PROJ[[i]][[j]])[1]
names(F.PROJ[[i]][[j]])[1] <- "PLAYER"
F.PROJ[[i]][[j]] <- F.PROJ[[i]][[j]][-2,]
F.PROJ[[i]][[j]]$TEAM <- str_extract(F.PROJ[[i]][[j]]$PLAYER, '\\b[^,]+$')
F.PROJ[[i]][[j]]$POS <- str_extract(F.PROJ[[i]][[j]]$TEAM, '\\b[^ ]+$')
F.PROJ[[i]][[j]]$PLAYER <- gsub("\\,.*","",F.PROJ[[i]][[j]]$PLAYER)
F.PROJ[[i]][[j]]$PLAYER <- gsub("^[[:digit:]]*. ","",F.PROJ[[i]][[j]]$PLAYER)
F.PROJ[[i]][[j]]$TEAM <- gsub(" .*$", "",F.PROJ[[i]][[j]]$TEAM)
}
}
## Cleaning: create conditions to divide F.PROJ list by position
list.condWR <- list.condRB <- list.condQB <- list.condTE <- list.condDST <- list.condK <- list()
for(i in seq(F.PROJ)){
list.condWR[[i]] <- sapply(seq(F.PROJ[[i]]), function(x){F.PROJ[[i]][[x]]$POS =="WR"})
list.condRB[[i]] <- sapply(seq(F.PROJ[[i]]), function(x){F.PROJ[[i]][[x]]$POS =="RB"})
list.condQB[[i]] <- sapply(seq(F.PROJ[[i]]), function(x){F.PROJ[[i]][[x]]$POS =="QB"})
list.condTE[[i]] <- sapply(seq(F.PROJ[[i]]), function(x){F.PROJ[[i]][[x]]$POS =="TE"})
list.condDST[[i]] <- sapply(seq(F.PROJ[[i]]), function(x){F.PROJ[[i]][[x]]$POS =="D/ST"})
list.condK[[i]] <- sapply(seq(F.PROJ[[i]]), function(x){F.PROJ[[i]][[x]]$POS =="K"})
}
## Cleaning: Create lists of players by position
WR <- RB <- QB <- TE <- DST <- K <- list()
for(i in seq(F.PROJ)){
WR[[i]] <- F.PROJ[[i]][list.condWR[[i]]]
RB[[i]] <- F.PROJ[[i]][list.condRB[[i]]]
QB[[i]] <- F.PROJ[[i]][list.condQB[[i]]]
DST[[i]] <- F.PROJ[[i]][list.condDST[[i]]]
TE[[i]] <- F.PROJ[[i]][list.condTE[[i]]]
K[[i]] <- F.PROJ[[i]][list.condK[[i]]]
}
## Cleaning: create condition lists to remove empty lists from large lists
WR.cond <- RB.cond <- QB.cond <- TE.cond <- DST.cond <- K.cond <- list()
for(i in seq(WR)){
WR.cond[[i]] <- length(WR[[i]])=="0"
}
for(i in seq(RB)){
RB.cond[[i]] <- length(RB[[i]])=="0"
}
for(i in seq(QB)){
QB.cond[[i]] <- length(QB[[i]])=="0"
}
for(i in seq(DST)){
DST.cond[[i]] <- length(DST[[i]])=="0"
}
for(i in seq(TE)){
TE.cond[[i]] <- length(TE[[i]])=="0"
}
for(i in seq(K)){
K.cond[[i]] <- length(K[[i]])=="0"
}
## Cleaning: subset large lists to remove empty lists
WR <- WR[!unlist(WR.cond)]
RB <- RB[!unlist(RB.cond)]
QB <- QB[!unlist(QB.cond)]
TE <- TE[!unlist(TE.cond)]
DST <- DST[!unlist(DST.cond)]
K <- K[!unlist(K.cond)]
## Cleaning: Coerce lists to dataframes
for(i in seq(WR)){
WR[[i]] <- do.call(rbind, lapply(WR[[i]], data.frame, stringsAsFactors=FALSE))
}
for(i in seq(RB)){
RB[[i]] <- do.call(rbind, lapply(RB[[i]], data.frame, stringsAsFactors=FALSE))
}
for(i in seq(QB)){
QB[[i]] <- do.call(rbind, lapply(QB[[i]], data.frame, stringsAsFactors=FALSE))
}
for(i in seq(TE)){
TE[[i]] <- do.call(rbind, lapply(TE[[i]], data.frame, stringsAsFactors=FALSE))
}
for(i in seq(DST)){
DST[[i]] <- do.call(rbind, lapply(DST[[i]], data.frame, stringsAsFactors=FALSE))
}
for(i in seq(K)){
K[[i]] <- do.call(rbind, lapply(K[[i]], data.frame, stringsAsFactors=FALSE))
}
## Cleaning: coerce lists to position delimited dataframes
WR <- as.data.frame(rbindlist(WR))
RB <- as.data.frame(rbindlist(RB))
QB <- as.data.frame(rbindlist(QB))
TE <- as.data.frame(rbindlist(TE))
DST <- as.data.frame(rbindlist(DST))
K <- as.data.frame(rbindlist(K))
## Cleaning: remove extraneous columns
WR <- WR[, -c(2, 3, 10, 11, 12)]
RB <- RB[, -c(2, 3, 9, 10, 11)]
QB <- QB[, -c(2, 3, 9, 10, 11)]
TE <- TE[, -c(2, 3, 10, 11, 12)]
K <- K[, -c(2,3,9)]
## Cleaning: DST remove columns, correct regex error, add Team cities
DST$PLAYER <- gsub("D/ST D/ST", "D/ST", DST$PLAYER)
DST$TEAM <- str_extract(DST$PLAYER, '\\b[^ ]+')
DST$TEAM <- mapping[as.character(DST$TEAM)]
DST <- DST[, -c(2, 3, 10)]
## No longer necessary -- better data from ESPN projections
## prepare to download data from ESPN leaders
## espn_base_url <- "http://games.espn.go.com/ffl/leaders?&startIndex="
## espn_pages <- c("0","50","100", "150", "200", "250", "300", "350", "400", "450")
## espn_urls <- paste0(espn_base_url, espn_pages)
## lapply(1:length(dwn.list), function(x){download.file(url = dwn.list[[x]][1], destfile = paste0("rank", x))})
## nums <- 1:10
## rank_files <- paste0("rank", nums)
## F.RANK <- lapply(rank_files, function(x){data.table(readHTMLTable(x, as.data.frame=TRUE, stringsAsFactors=FALSE)$playertable_0)})
## RANKS <- data.frame()
##for(i in 1:length(F.RANK)){
## RANKS <- rbind(RANKS, F.RANK[[i]])
## }
## names(RANKS) <- as.character(RANKS[1,])
## RANKS <- RANKS[-1,]
## RANKS$`PLAYER, TEAM POS` <- sub("(.*?),.*", "\\1", RANKS$`PLAYER, TEAM POS`)
#RANKS$TEAM.POS <- str_extract(RANKS$`PLAYER, TEAM POS` , '\\b[^,]+$')
#RANKS$TEAM.POS <- sub("SSPD$", "", RANKS$TEAM.POS)
#RANKS$TEAM.POS <- sub("Q$", "", RANKS$TEAM.POS)
#RANKS$TEAM.POS <- sub("P$", "", RANKS$TEAM.POS)
#RANKS$TEAM.POS <- sub("D$", "", RANKS$TEAM.POS)
#RANKS$POS.1 <- str_sub(RANKS$TEAM.POS, 5)
## names(RANKS)[1] <- 'PLAYER'
## RANKS$PTS <- suppressWarnings(as.numeric(RANKS$PTS))
## fix <- which(is.na(RANKS$PTS) == TRUE)
## RANKS <- RANKS[!fix,]
Merge df and end of season dataframes. Perform final cleaning and coerce variables.
## Create data frame for merger with Draft and ADP
dfWR <- WR[, c(1, 9, 10, 8)]
dfRB <- RB[, c(1, 8, 9, 7)]
dfQB <- QB[, c(1, 8, 9, 7)]
dfTE <- TE[, c(1, 9, 10, 8)]
dfDST <- DST[, c(1,9,10,8)]
dfK <-K[, c(1, 8, 9, 7)]
dfALL <- rbind.data.frame(dfWR, dfRB, dfQB, dfTE, dfDST, dfK)
## Merge data from Projections with Draft and ADP data.
DFinal <- merge(dfALL,df, by = "PLAYER", all = TRUE)
DFinal <- DFinal[with(DFinal, order(ORDER)),]
DFinal <- DFinal[,-8 ]
names(DFinal) <- c("PLAYER", "TEAM", "POS", "PTS", "ORDER", "MANAGER", "RANK", "AVGPICK")
DFinal$MANAGER <- as.factor(DFinal$MANAGER)
DFinal$AVGPICK <- as.numeric(DFinal$AVGPICK)
DFinal$RANK <- as.numeric(DFinal$RANK)
DFinal$PTS <- as.numeric(DFinal$PTS)
## Warning: NAs introduced by coercion
DFinal$POS <- as.factor(DFinal$POS)
DFinal$TEAM <- as.factor(DFinal$TEAM)
Split DFinal into list of dataframes by MANAGER or undrafted.
TEAMS <- split(DFinal, DFinal$MANAGER)
TEAMS$`Gods of Goof` <- TEAMS$`Gods of Goof`[-c(15,16),]
## x <- grep("Undrafted", names(TEAMS))
## TEAMS[[x]] <- NULL
POSITION <- split(DFinal, DFinal$POS)
## [[1]]
## [[1]][[1]]
## [1] "All of Cromarties Kids"
##
## [[1]][[2]]
##
## [[1]][[3]]
##
## [[1]][[4]]
## PLAYER RANK AVGPICK PTS
## [1,] "C.J. Anderson" "8" "10.8" "103"
## [2,] "Dez Bryant" "13" "13.4" "54"
## [3,] "Alshon Jeffery" "25" "27.5" "101"
## [4,] "Frank Gore" "37" "39.9" "147"
## [5,] "Davante Adams" "52" "55.6" "51"
## [6,] "Martellus Bennett" "64" "65.3" "56"
## [7,] "Doug Martin" "76" "82.6" "187"
## [8,] "John Brown" "101" "106" "134"
## [9,] "Philip Rivers" "106" "107.3" "277"
## [10,] "Carson Palmer" "150" "131.1" "300"
## [11,] "Montee Ball" "169" "135.4" NA
## [12,] "Knile Davis" "172" "135.8" "11"
## [13,] "Zach Ertz" "105" "107" "89"
## [14,] "Jerick McKinnon" "200" "147.6" "51"
## [15,] "Lions D/ST" "185" "139.7" "84"
## [16,] "Brandon McManus" "191" "141.3" "135"
##
## [[1]][[5]]
## [1] 12.98125
##
##
## [[2]]
## [[2]][[1]]
## [1] "Bud Light and a Koozie"
##
## [[2]][[2]]
##
## [[2]][[3]]
##
## [[2]][[4]]
## PLAYER RANK AVGPICK PTS
## [1,] "Le'Veon Bell" "2" "3.5" "83"
## [2,] "DeAndre Hopkins" "35" "34.9" "211"
## [3,] "Randall Cobb" "21" "23.1" "120"
## [4,] "Jonathan Stewart" "42" "48.1" "139"
## [5,] "Ben Roethlisberger" "41" "47.7" "222"
## [6,] "Joique Bell" "63" "64.6" "72"
## [7,] "Brandon Marshall" "62" "63.5" "223"
## [8,] "Alfred Blue" "111" "112.7" "85"
## [9,] "Julius Thomas" "85" "87.9" "70"
## [10,] "Martavis Bryant" "92" "97.9" "112"
## [11,] "Joe Flacco" "123" "120.3" "155"
## [12,] "Darren Sproles" "139" "128.1" "94"
## [13,] "Matt Asiata" NA "150" "13"
## [14,] "Brandon LaFell" "156" "131.6" "45"
## [15,] "Eagles D/ST" "138" "127.8" "91"
## [16,] "Chandler Catanzaro" NA "150" "140"
##
## [[2]][[5]]
## [1] 1.307143
##
##
## [[3]]
## [[3]][[1]]
## [1] "Fuck all yall Ima free agent"
##
## [[3]][[2]]
##
## [[3]][[3]]
##
## [[3]][[4]]
## PLAYER RANK AVGPICK PTS
## [1,] "Adrian Peterson" "1" "2.9" "217"
## [2,] "Russell Wilson" "24" "27.3" "322"
## [3,] "Emmanuel Sanders" "29" "31.7" "140"
## [4,] "Sammy Morris" NA "150" NA
## [5,] "DeSean Jackson" "48" "52.9" "72"
## [6,] "Travis Kelce" "54" "57.6" "109"
## [7,] "Rashad Jennings" "68" "72.3" "125"
## [8,] "Ryan Tannehill" "94" "100.2" "245"
## [9,] "Dolphins D/ST" "127" "122" "69"
## [10,] "Roddy White" "88" "93.1" "51"
## [11,] "Tre Mason" "102" "106.1" "26"
## [12,] "DeAngelo Williams" "162" "133.7" "179"
## [13,] "Ravens D/ST" "140" "128.5" "85"
## [14,] "Breshad Perriman" "168" "134.8" "0"
## [15,] "Dan Bailey" "179" "138.1" "129"
## [16,] "Jay Ajayi" NA "150" "31"
##
## [[3]][[5]]
## [1] 5.914286
##
##
## [[4]]
## [[4]][[1]]
## [1] "Gods of Goof"
##
## [[4]][[2]]
##
## [[4]][[3]]
##
## [[4]][[4]]
## PLAYER RANK AVGPICK PTS
## [1,] "Antonio Brown" "6" "7.9" "243"
## [2,] "Rob Gronkowski" "14" "14.6" "176"
## [3,] "Carlos Hyde" "36" "36.7" "66"
## [4,] "Cam Newton" "75" "81.2" "373"
## [5,] "T.J. Yeldon" "65" "66.4" "109"
## [6,] "Stephen Gostkowski" "89" "93.5" "168"
## [7,] "Eric Decker" "84" "87.2" "166"
## [8,] "Tevin Coleman" "97" "103.7" "37"
## [9,] "Broncos D/ST" "115" "114.4" "182"
## [10,] "Marlon Brown" NA "150" "7"
## [11,] "Lorenzo Taliaferro" "164" "133.8" "12"
## [12,] "Josh Hill" "159" "132.5" "21"
## [13,] "DeVante Parker" "153" "131.4" "64"
## [14,] "Alex Smith" "131" "123.2" "259"
## [15,] "David Johnson" "189" "141" "164"
## [16,] "Caleb Sturgis" NA "150" "93"
##
## [[4]][[5]]
## [1] 7.821429
##
##
## [[5]]
## [[5]][[1]]
## [1] "Gulf Coast Avengers"
##
## [[5]][[2]]
##
## [[5]][[3]]
##
## [[5]][[4]]
## PLAYER RANK AVGPICK PTS
## [1,] "Marshawn Lynch" "4" "5" "66"
## [2,] "Aaron Rodgers" "10" "11.9" "286"
## [3,] "T.Y. Hilton" "22" "24.8" "135"
## [4,] "Melvin Gordon" "39" "40.4" "64"
## [5,] "Arian Foster" "55" "58.9" "51"
## [6,] "Vincent Jackson" "53" "57.2" "70"
## [7,] "LeGarrette Blount" "74" "80.3" "110"
## [8,] "Jarvis Landry" "70" "73" "154"
## [9,] "Kyle Rudolph" "141" "128.9" "74"
## [10,] "Cardinals D/ST" "149" "130.8" "157"
## [11,] "Cody Parkey" "174" "136.5" "16"
## [12,] "Victor Cruz" "109" "110.6" "0"
## [13,] "Eddie Royal" "161" "133.4" "26"
## [14,] "Jameis Winston" "137" "127.7" "261"
## [15,] "Roy Helu" NA "150" "14"
## [16,] "Heath Miller" "148" "130.5" "61"
##
## [[5]][[5]]
## [1] 6.406667
##
##
## [[6]]
## [[6]][[1]]
## [1] "ICE UP SON"
##
## [[6]][[2]]
##
## [[6]][[3]]
##
## [[6]][[4]]
## PLAYER RANK AVGPICK PTS
## [1,] "Matt Forte" "9" "11.2" "159"
## [2,] "Odell Beckham Jr." "16" "16.5" "216"
## [3,] "Peyton Manning" "23" "27.2" "87"
## [4,] "Latavius Murray" "49" "53.6" "148"
## [5,] "Andre Johnson" "50" "54.6" "68"
## [6,] "Amari Cooper" "44" "49.6" "133"
## [7,] "Isaiah Crowell" "83" "86.5" "107"
## [8,] "Allen Robinson" "79" "84.7" "217"
## [9,] "Jordan Cameron" "81" "85.4" "50"
## [10,] "Andre Williams" "144" "129.4" "28"
## [11,] "Charles Johnson" "90" "93.7" "10"
## [12,] "Fred Jackson" "147" "130.5" "34"
## [13,] "Steve Smith Sr." "99" "104.3" "82"
## [14,] "David Cobb" "165" "133.8" "18"
## [15,] "Patriots D/ST" "124" "120.4" "115"
## [16,] "Randy Bullock" NA "150" "83"
##
## [[6]][[5]]
## [1] 1.44
##
##
## [[7]]
## [[7]][[1]]
## [1] "Mother, Juggs, and Speed"
##
## [[7]][[2]]
##
## [[7]][[3]]
##
## [[7]][[4]]
## PLAYER RANK AVGPICK PTS
## [1,] "LeSean McCoy" "15" "14.7" "137"
## [2,] "Julio Jones" "17" "17.2" "231"
## [3,] "Tom Brady" "72" "79.7" "335"
## [4,] "Todd Gurley" "45" "49.9" "176"
## [5,] "Golden Tate" "47" "50.7" "111"
## [6,] "Greg Olsen" "46" "50" "144"
## [7,] "Ryan Mathews" "87" "89.5" "95"
## [8,] "Matt Ryan" "60" "63" "224"
## [9,] "Jets D/ST" "126" "121.1" "111"
## [10,] "Torrey Smith" "91" "97.5" "87"
## [11,] "Bishop Sankey" "112" "112.9" "39"
## [12,] "Justin Tucker" "154" "131.5" "139"
## [13,] "Nick Foles" NA "150" "90"
## [14,] "Pierre Garcon" "146" "129.7" "108"
## [15,] "Donte Moncrief" "195" "142.9" "104"
## [16,] "Theo Riddick" NA "150" "87"
##
## [[7]][[5]]
## [1] 4.478571
##
##
## [[8]]
## [[8]][[1]]
## [1] "Public Intoxicateds"
##
## [[8]][[2]]
##
## [[8]][[3]]
##
## [[8]][[4]]
## PLAYER RANK AVGPICK PTS
## [1,] "Andrew Luck" "11" "12.5" "126"
## [2,] "DeMarco Murray" "7" "10.5" "129"
## [3,] "Alfred Morris" "31" "32" "79"
## [4,] "Julian Edelman" "40" "42.5" "107"
## [5,] "Jeremy Maclin" "57" "61.6" "148"
## [6,] "Chris Ivory" "73" "80" "159"
## [7,] "Jason Witten" "61" "63.3" "80"
## [8,] "Seahawks D/ST" "58" "61.8" "140"
## [9,] "Larry Fitzgerald" "86" "89.5" "164"
## [10,] "Matt Prater" "192" "141.5" "116"
## [11,] "Trent Richardson" NA "150" "0"
## [12,] "Percy Harvin" "175" "136.7" "26"
## [13,] "Darren McFadden" "114" "114.3" "145"
## [14,] "Ben Tate" NA "150" "0"
## [15,] "Derek Carr" "129" "122.4" "262"
## [16,] "Vikings D/ST" "199" "144.3" "130"
##
## [[8]][[5]]
## [1] 8.578571
##
##
## [[9]]
## [[9]][[1]]
## [1] "Supreme Commissioner"
##
## [[9]][[2]]
##
## [[9]][[3]]
##
## [[9]][[4]]
## PLAYER RANK AVGPICK PTS
## [1,] "Jeremy Hill" "19" "17.6" "145"
## [2,] "Demaryius Thomas" "12" "13" "156"
## [3,] "Lamar Miller" "30" "31.9" "173"
## [4,] "Justin Forsett" "32" "33.4" "83"
## [5,] "Keenan Allen" "43" "48.8" "90"
## [6,] "Joseph Randle" "51" "54.8" "60"
## [7,] "Nelson Agholor" "77" "82.8" "29"
## [8,] "Ameer Abdullah" "80" "85.2" "78"
## [9,] "Danny Woodhead" "120" "118.5" "149"
## [10,] "Marques Colston" "107" "109.6" "68"
## [11,] "Sam Bradford" "104" "106.8" "184"
## [12,] "Delanie Walker" "113" "113.2" "143"
## [13,] "Devin Funchess" "119" "118.4" "70"
## [14,] "Jay Cutler" "142" "128.9" "217"
## [15,] "Packers D/ST" "157" "131.8" "99"
## [16,] "Mason Crosby" "187" "140.2" "120"
##
## [[9]][[5]]
## [1] 3.63125
##
##
## [[10]]
## [[10]][[1]]
## [1] "Team McReavy"
##
## [[10]][[2]]
##
## [[10]][[3]]
##
## [[10]][[4]]
## PLAYER RANK AVGPICK PTS
## [1,] "Eddie Lacy" "3" "3.8" "109"
## [2,] "Brandin Cooks" "34" "34.2" "162"
## [3,] "Drew Brees" "33" "33.6" "299"
## [4,] "Andre Ellington" "56" "60.1" "52"
## [5,] "Jordan Matthews" "38" "40.2" "139"
## [6,] "Dwayne Allen" "108" "110.2" "13"
## [7,] "Giovani Bernard" "66" "68.9" "119"
## [8,] "Bills D/ST" "78" "84.5" "79"
## [9,] "Steven Hauschka" "116" "114.7" "144"
## [10,] "Michael Floyd" "96" "102.9" "115"
## [11,] "Matthew Stafford" "93" "99.4" "280"
## [12,] "Duke Johnson Jr." NA "150" "90"
## [13,] "Kamar Aiken" NA "150" "116"
## [14,] "Garrett Hartley" NA "150" "0"
## [15,] "Kendall Wright" "118" "116.7" "54"
## [16,] "Buccaneers D/ST" NA "150" "90"
##
## [[10]][[5]]
## [1] -2.516667
##
##
## [[11]]
## [[11]][[1]]
## [1] "Team Sarff"
##
## [[11]][[2]]
##
## [[11]][[3]]
##
## [[11]][[4]]
## PLAYER RANK AVGPICK PTS
## [1,] "Mike Evans" "28" "30.9" "131"
## [2,] "A.J. Green" "20" "21.7" "179"
## [3,] "Mark Ingram" "27" "29.2" "143"
## [4,] "Eli Manning" "100" "104.9" "278"
## [5,] "Owen Daniels" "122" "119" "62"
## [6,] "Reggie Bush" "166" "134" "3"
## [7,] "Texans D/ST" "82" "86.2" "138"
## [8,] "Adam Vinatieri" "103" "106.7" "121"
## [9,] "Teddy Bridgewater" "125" "120.8" "187"
## [10,] "Michael Crabtree" "177" "137.4" "139"
## [11,] "Devonta Freeman" "110" "112.5" "230"
## [12,] "Anquan Boldin" "117" "115.8" "95"
## [13,] "Charles Sims" "136" "126.4" "117"
## [14,] "Garrett Graham" NA "150" "6"
## [15,] "Johnny Manziel" NA "150" "86"
## [16,] "Cody Latimer" "170" "135.5" "11"
##
## [[11]][[5]]
## [1] 7.285714
##
##
## [[12]]
## [[12]][[1]]
## [1] "The Aint's"
##
## [[12]][[2]]
##
## [[12]][[3]]
##
## [[12]][[4]]
## PLAYER RANK AVGPICK PTS
## [1,] "Jamaal Charles" "5" "5.2" "75"
## [2,] "Calvin Johnson" "18" "17.5" "164"
## [3,] "Jimmy Graham" "26" "29.2" "69"
## [4,] "Tony Romo" "67" "69.5" "39"
## [5,] "C.J. Spiller" "71" "77.1" "39"
## [6,] "Sammy Watkins" "59" "62.4" "152"
## [7,] "Mike Wallace" "69" "72.5" "54"
## [8,] "Shane Vereen" "95" "101.4" "88"
## [9,] "Rams D/ST" "98" "103.9" "110"
## [10,] "Matt Bryant" "197" "144.1" "70"
## [11,] "Khiry Robinson" NA "150" "46"
## [12,] "Brandon Coleman" NA "150" "53"
## [13,] "Pierre Thomas" NA "150" "13"
## [14,] "Nick Toon" NA "150" "0"
## [15,] "Robert Meachem" NA "150" "0"
## [16,] "Saints D/ST" NA "150" "41"
##
## [[12]][[5]]
## [1] 2.22