R/player_advanced_stats.R

#' @title Scrape Advanced Stats
#' @param players a vector of player names
#' @description Gets Player Stats, Normalized Per 100 Possessions
#' @keywords NBA basketball-reference
#' @importFrom magrittr %>%
#' @export
#' @examples
#' player_advanced_stats(c("Stephen Curry", "Steven Adams"))

player_advanced_stats <- function(players, year = 'all') {

  #base url
  base_url <- 'https://www.basketball-reference.com/'

  #load data frame with player names and urls
  player_df <- readr::read_csv("https://raw.githubusercontent.com/emilykuehler/basketballstatsR/master/data-raw/player_card.csv") %>%
    dplyr::mutate(player_name = tolower(player_name)) %>%
    dplyr::select(player_name, init_season, links) %>%
    subset(player_name %in% tolower(players))

  player_df$player_name[duplicated(player_df$player_name)] <- paste0(player_df$player_name[duplicated(player_df$player_name)],
                                                                     player_df$init_season[duplicated(player_df$player_name)])

  #check to see if user has input any names that aren't in database
  player_vec <- tolower(players)

  bad_names <- player_vec[!player_vec %in% player_df$player_name]

  #give user msg if they messed up
  if(length(bad_names > 0)) {
    print("Several player names were either mistyped or not in the database.")
    print("No data will be collected for:")
    print(bad_names)
  }

  df_list <- list()

  for (row_num in 1:nrow(player_df)) {
    link_suffix <- player_df$links[row_num]
    url <- paste0(base_url, link_suffix)
    df <- url2playeradvanced(url)
    name <- player_df$player_name[which(player_df$links==link_suffix)]
    if (year=='all') {
      df_list[[name]] <- df
      print(name)
    } else {
      df2 <- df %>%
        dplyr::filter(season==year)
      print(dim(df2))
      df_list[[name]] <- df2
      print(name)
    }
  }

  return (df_list)
}
emilykuehler/basketballstatsR documentation built on May 31, 2019, 10:01 a.m.