library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(rvest)
## Loading required package: xml2
library(stringr)
library(DT)
library(sparkline)
fg_current_standings <- function() {
url = "https://www.fangraphs.com/depthcharts.aspx?position=Standings"
h = read_html(url)
tables = html_table(h)[4:9]
div_order = paste(rep(c("AL", "NL"), each=3), c("E", "C", "W"), sep='-')
current_standings = lapply(1:6, function(i) {
tmp = tables[[i]]
names(tmp) = tmp[2,]
tmp = tmp[3:nrow(tmp),1:8] # only current standings + team name, not projections
tmp$div_id = div_order[[i]]
tmp
}) %>% dplyr::bind_rows()
nms = names(current_standings)
nms = str_replace(nms, "%", "pct")
nms = str_replace(nms, "/", "_")
names(current_standings) = nms
for (nm in c("G", "W", "L", "RDif")) {
current_standings[[nm]] = as.integer(current_standings[[nm]])
}
for (nm in c("Wpct", "RS_G", "RA_G")) {
current_standings[[nm]] = as.numeric(current_standings[[nm]])
}
current_standings
}
current_standings = fg_current_standings()
s = current_standings %>%
group_by(div_id) %>%
mutate(rank=row_number()) %>%
ungroup() %>% mutate(pythag=RS_G**2/(RS_G**2+RA_G**2)) %>%
mutate(ravg=mean(RS_G), r1=RS_G-ravg, ra1=ravg-RA_G)
s1 = s %>% mutate(p1= (pythag-Wpct)*162 / 24 * 100, rs1=r1/2*100, ra1=ra1/2*100) %>%
select(div_id, Team, rank, W, L, Wpct, RS_G, RA_G, pythag, rs1, ra1, p1)
s1 = s1 %>% mutate(data=paste(rs1,rs1,rs1,ra1,ra1,ra1,p1,p1,p1,sep=","))
s2 = s1 %>% select(div_id, Team:RA_G, data)
columnDefs = list(list(
targets = c(9),
render = JS("function(data, type, full){
return '<span class=spark>' + data + '</span>'
}")
))
fnDrawCallback = JS("function (oSettings, json) {
$('.spark:not(:has(canvas))').sparkline('html', {
type: 'bar',
highlightColor: 'orange'
});
}")
d1 <- datatable(s2, options = list(
columnDefs = columnDefs,
fnDrawCallback = fnDrawCallback
))
d1$dependencies <- append(d1$dependencies, htmlwidgets:::getDependency('sparkline'))
d1