Skip to contents

Welcome to the FastBreakR package! Designed for simplicity, speed, and consistency, FastBreakR makes it easy to fetch and analyze NBA data. With a robust set of core tools, the package is fully functional and continually evolving, with new features regularly added to enhance its capabilities.

Core Features

  • Speed and Efficiency: Optimized to process large data requests rapidly, FastBreakR includes built-in mechanisms like rate-limiting pauses to ensure smooth operation while adhering to NBA API constraints.
  • Data Consolidation: Seamlessly merges multiple statistical categories into a single, unified dataset while automatically eliminating duplicate columns, ensuring a cleaner and more organized output for analysis.
  • Consistent and Tidy Naming: Column names are cleaned and standardized while staying consistent with NBA naming conventions.
  • User-Friendly Design: Functions are intuitive, making it easy to fetch and manipulate data.

FastBreakR in Action

FastBreakR provides tools to fetch everything from play-by-play data to advanced player stats. Its modular design ensures it can fit into any analysis pipeline, whether you’re building predictive models, exploring shot tendencies, or analyzing team lineups.

This vignette introduces some the primary functions of FastBreakR, demonstrating their capabilities and providing examples to help you get started.

Prerequisites

Before you start, ensure you have installed the FastBreakR package and its dependencies. You can install FastBreakR directly from GitHub:

# install.packages("remotes")
remotes::install_github("JesseKartes/FastBreakR", quiet = TRUE)

Getting Started

To get started with FastBreakR, simply load the package along with dplyr to streamline your data analysis workflow:

# Load the FastBreakR package
library(FastBreakR)
library(dplyr, warn.conflicts = FALSE)

Fetching Team Stats

The nba_team_stats() function fetches NBA team statistics for specified seasons. By default, it retrieves data for all the following measure types, while automatically removing duplicate columns from the merged categories:

  • Traditional Stats
  • Advanced Stats
  • Four Factors
  • Miscellaneous Stats
  • Scoring Stats

If you only need one or a few specific stat categories, simply use the measure_type argument within the nba_team_stats() function.

# Fetch team stats for the 2023-2024 & 2024-2025 regular season
team_stats <- nba_team_stats(2024:2025, season_type = "Regular Season")
## Fetching season 2024 (1/2)
## Pausing for 5 seconds before fetching the next season...
## Fetching season 2025 (2/2)
# Display a glimpse of the team stats data
glimpse(team_stats)
## Rows: 4,920
## Columns: 81
## $ season_year        <dbl> 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 202…
## $ team_id            <chr> "1610612747", "1610612743", "1610612744", "16106127…
## $ team_abbreviation  <chr> "LAL", "DEN", "GSW", "PHX", "ATL", "CHA", "IND", "W…
## $ team_name          <chr> "Los Angeles Lakers", "Denver Nuggets", "Golden Sta…
## $ game_id            <chr> "0022300061", "0022300061", "0022300062", "00223000…
## $ game_date          <date> 2023-10-24, 2023-10-24, 2023-10-24, 2023-10-24, 20…
## $ matchup            <chr> "LAL @ DEN", "DEN vs. LAL", "GSW vs. PHX", "PHX @ G…
## $ location           <chr> "away", "home", "home", "away", "away", "home", "ho…
## $ wl                 <chr> "L", "W", "L", "W", "L", "W", "W", "L", "L", "W", "…
## $ min                <dbl> 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
## $ fgm                <dbl> 41, 48, 36, 42, 39, 43, 56, 44, 36, 37, 42, 32, 44,
## $ fga                <dbl> 90, 91, 101, 95, 93, 86, 107, 96, 97, 77, 87, 79, 9…
## $ fg_pct             <dbl> 0.456, 0.527, 0.356, 0.442, 0.419, 0.500, 0.523, 0.…
## $ fg3m               <dbl> 10, 14, 10, 11, 5, 11, 20, 9, 18, 12, 9, 12, 17, 9,
## $ fg3a               <dbl> 29, 34, 43, 33, 29, 37, 43, 24, 41, 39, 34, 34, 43,
## $ fg3_pct            <dbl> 0.345, 0.412, 0.233, 0.333, 0.172, 0.297, 0.465, 0.…
## $ ftm                <dbl> 15, 9, 22, 13, 27, 19, 11, 23, 14, 22, 23, 10, 9, 2…
## $ fta                <dbl> 20, 12, 28, 17, 33, 26, 12, 29, 26, 26, 26, 16, 10,
## $ ft_pct             <dbl> 0.750, 0.750, 0.786, 0.765, 0.818, 0.731, 0.917, 0.…
## $ oreb               <dbl> 13, 9, 18, 17, 12, 12, 10, 11, 17, 7, 17, 7, 9, 13,
## $ dreb               <dbl> 31, 33, 31, 43, 30, 39, 41, 34, 30, 39, 40, 24, 29,
## $ reb                <dbl> 44, 42, 49, 60, 42, 51, 51, 45, 47, 46, 57, 31, 38,
## $ ast                <dbl> 23, 29, 19, 23, 24, 34, 38, 28, 24, 18, 19, 19, 25,
## $ tov                <dbl> 12, 12, 11, 19, 12, 19, 12, 14, 11, 13, 16, 19, 10,
## $ stl                <dbl> 5, 9, 11, 5, 12, 5, 10, 6, 9, 6, 8, 6, 10, 6, 3, 11…
## $ blk                <dbl> 4, 6, 6, 7, 1, 3, 8, 9, 0, 11, 6, 3, 6, 6, 13, 3, 9…
## $ blka               <dbl> 6, 4, 7, 6, 3, 1, 9, 8, 11, 0, 3, 6, 6, 6, 3, 13, 1…
## $ pf                 <dbl> 18, 15, 23, 22, 19, 21, 23, 11, 22, 22, 20, 24, 23,
## $ pfd                <dbl> 15, 18, 22, 23, 21, 19, 11, 23, 22, 22, 24, 20, 16,
## $ pts                <dbl> 107, 119, 104, 108, 110, 116, 143, 120, 104, 108, 1…
## $ plus_minus         <dbl> -12, 12, -4, 4, -6, 6, 23, -23, -4, 4, 30, -30, 1, 
## $ off_rating         <dbl> 111.5, 125.3, 102.0, 106.9, 105.8, 111.5, 128.8, 10…
## $ def_rating         <dbl> 125.3, 111.5, 106.9, 102.0, 111.5, 105.8, 109.1, 12…
## $ net_rating         <dbl> -13.8, 13.8, -5.0, 5.0, -5.8, 5.8, 19.7, -19.7, -5.…
## $ ast_pct            <dbl> 0.561, 0.604, 0.528, 0.548, 0.615, 0.791, 0.679, 0.…
## $ ast_to             <dbl> 1.92, 2.42, 1.73, 1.21, 2.00, 1.79, 3.17, 2.00, 2.1…
## $ ast_ratio          <dbl> 16.8, 21.2, 13.1, 15.9, 16.7, 22.4, 23.0, 18.5, 16.…
## $ oreb_pct           <dbl> 0.346, 0.289, 0.358, 0.396, 0.276, 0.326, 0.314, 0.…
## $ dreb_pct           <dbl> 0.711, 0.654, 0.604, 0.642, 0.674, 0.724, 0.768, 0.…
## $ reb_pct            <dbl> 0.515, 0.485, 0.467, 0.533, 0.452, 0.548, 0.551, 0.…
## $ tm_tov_pct         <dbl> 0.125, 0.126, 0.108, 0.188, 0.115, 0.183, 0.108, 0.…
## $ efg_pct            <dbl> 0.511, 0.604, 0.406, 0.500, 0.446, 0.564, 0.617, 0.…
## $ ts_pct             <dbl> 0.541, 0.618, 0.459, 0.527, 0.512, 0.595, 0.637, 0.…
## $ pace               <dbl> 95.5, 95.5, 101.5, 101.5, 104.0, 104.0, 110.5, 110.…
## $ pace_per40         <dbl> 79.58, 79.58, 84.58, 84.58, 86.67, 86.67, 92.08, 92…
## $ poss               <dbl> 96, 95, 102, 101, 104, 104, 111, 110, 97, 96, 96, 9…
## $ pie                <dbl> 0.421, 0.579, 0.436, 0.564, 0.451, 0.549, 0.572, 0.…
## $ fta_rate           <dbl> 0.222, 0.132, 0.277, 0.179, 0.355, 0.302, 0.112, 0.…
## $ opp_efg_pct        <dbl> 0.604, 0.511, 0.500, 0.406, 0.564, 0.446, 0.505, 0.…
## $ opp_fta_rate       <dbl> 0.132, 0.222, 0.179, 0.277, 0.302, 0.355, 0.302, 0.…
## $ opp_tov_pct        <dbl> 0.126, 0.125, 0.188, 0.108, 0.183, 0.115, 0.127, 0.…
## $ opp_oreb_pct       <dbl> 0.289, 0.346, 0.396, 0.358, 0.326, 0.276, 0.232, 0.…
## $ pts_off_tov        <dbl> 18, 20, 22, 9, 17, 12, 22, 14, 11, 14, 23, 14, 26, 
## $ pts_2nd_chance     <dbl> 4, 17, 20, 27, 14, 14, 11, 12, 20, 4, 19, 10, 13, 1…
## $ pts_fb             <dbl> 20, 20, 11, 13, 19, 17, 32, 22, 7, 18, 5, 11, 21, 2…
## $ pts_paint          <dbl> 58, 52, 44, 48, 58, 56, 60, 68, 24, 42, 54, 32, 50,
## $ opp_pts_off_tov    <dbl> 20, 18, 9, 22, 12, 17, 14, 22, 14, 11, 14, 23, 16, 
## $ opp_pts_2nd_chance <dbl> 17, 4, 27, 20, 14, 14, 12, 11, 4, 20, 10, 19, 10, 1…
## $ opp_pts_fb         <dbl> 20, 20, 13, 11, 17, 19, 22, 32, 18, 7, 11, 5, 24, 2…
## $ opp_pts_paint      <dbl> 52, 58, 48, 44, 56, 58, 68, 60, 42, 24, 32, 54, 56,
## $ pct_fga_2pt        <dbl> 0.678, 0.626, 0.574, 0.653, 0.688, 0.570, 0.598, 0.…
## $ pct_fga_3pt        <dbl> 0.322, 0.374, 0.426, 0.347, 0.312, 0.430, 0.402, 0.…
## $ pct_pts_2pt        <dbl> 0.579, 0.571, 0.500, 0.574, 0.618, 0.552, 0.503, 0.…
## $ pct_pts_2pt_mr     <dbl> 0.037, 0.134, 0.077, 0.130, 0.091, 0.069, 0.084, 0.…
## $ pct_pts_3pt        <dbl> 0.280, 0.353, 0.288, 0.306, 0.136, 0.284, 0.420, 0.…
## $ pct_pts_fb         <dbl> 0.187, 0.168, 0.106, 0.120, 0.173, 0.147, 0.224, 0.…
## $ pct_pts_ft         <dbl> 0.140, 0.076, 0.212, 0.120, 0.245, 0.164, 0.077, 0.…
## $ pct_pts_off_tov    <dbl> 0.168, 0.168, 0.212, 0.083, 0.155, 0.103, 0.154, 0.…
## $ pct_pts_paint      <dbl> 0.542, 0.437, 0.423, 0.444, 0.527, 0.483, 0.420, 0.…
## $ pct_ast_2pm        <dbl> 0.419, 0.559, 0.462, 0.387, 0.559, 0.719, 0.556, 0.…
## $ pct_uast_2pm       <dbl> 0.581, 0.441, 0.538, 0.613, 0.441, 0.281, 0.444, 0.…
## $ pct_ast_3pm        <dbl> 1.000, 0.714, 0.700, 1.000, 1.000, 1.000, 0.900, 0.…
## $ pct_uast_3pm       <dbl> 0.000, 0.286, 0.300, 0.000, 0.000, 0.000, 0.100, 0.…
## $ pct_ast_fgm        <dbl> 0.561, 0.604, 0.528, 0.548, 0.615, 0.791, 0.679, 0.…
## $ pct_uast_fgm       <dbl> 0.439, 0.396, 0.472, 0.452, 0.385, 0.209, 0.321, 0.…
## $ game_count         <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
## $ days_rest          <dbl> 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 1…
## $ days_next_game     <dbl> 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 
## $ is_b2b             <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FA…
## $ is_b2b_first       <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FA…
## $ is_b2b_second      <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FA…

Fetching Box Scores

Now that we have a data frame with team-level stats, let’s dive deeper and retrieve box scores for the Christmas Day games in 2024. Using our team_stats data frame, we can filter and extract the game IDs we need.

The nba_box_scores() function fetches detailed box score data for specified games and stat categories. The resulting data frame is clean and consolidated, with duplicate columns across stat categories automatically removed for easier analysis.

# Here, we're getting the game_ids we need
games <- team_stats %>%
  filter(game_date == "2024-12-25") %>%
  pull(game_id) %>%
  unique()

# Fetching Traditional and Hustle box scores
box_scores <- nba_box_scores(
  measure_types = c("Traditional", "Scoring", "Hustle"),
  game_ids = games
)
## Fetching 5 games in 1 batches
## Fetching batch 1/1: games
## 0022400405 to 0022400409
# Display a glimpse of the box score data
glimpse(box_scores)
## Rows: 144
## Columns: 61
## $ game_id                             <chr> "0022400405", "0022400405", "00224…
## $ location                            <chr> "away", "away", "away", "away", "a…
## $ team_id                             <int> 1610612759, 1610612759, 1610612759…
## $ person_id                           <int> 203084, 1631110, 1641705, 101108, 
## $ first_name                          <chr> "Harrison", "Jeremy", "Victor", "C…
## $ family_name                         <chr> "Barnes", "Sochan", "Wembanyama", 
## $ name_i                              <chr> "H. Barnes", "J. Sochan", "V. Wemb…
## $ player_slug                         <chr> "harrison-barnes", "jeremy-sochan"…
## $ position                            <chr> "F", "F", "C", "G", "G", "", "", "…
## $ comment                             <chr> "", "", "", "", "", "", "", "", ""…
## $ jersey_num                          <chr> "", "", "", "", "", "", "", "", ""…
## $ minutes                             <chr> "17:19", "33:28", "40:23", "36:24"…
## $ field_goals_made                    <int> 1, 8, 16, 4, 4, 3, 2, 1, 3, 0, 0, 
## $ field_goals_attempted               <int> 3, 10, 31, 8, 11, 7, 7, 2, 4, 0, 0…
## $ field_goals_percentage              <dbl> 0.333, 0.800, 0.516, 0.500, 0.364,
## $ three_pointers_made                 <int> 0, 3, 6, 3, 1, 3, 0, 0, 0, 0, 0, 0…
## $ three_pointers_attempted            <int> 1, 3, 16, 6, 4, 7, 1, 0, 0, 0, 0, 
## $ three_pointers_percentage           <dbl> 0.000, 1.000, 0.375, 0.500, 0.250,
## $ free_throws_made                    <int> 1, 2, 4, 2, 2, 0, 2, 0, 1, 0, 0, 0…
## $ free_throws_attempted               <int> 2, 2, 4, 2, 2, 0, 4, 0, 1, 0, 0, 0…
## $ free_throws_percentage              <dbl> 0.500, 1.000, 1.000, 1.000, 1.000,
## $ rebounds_offensive                  <int> 1, 2, 2, 0, 2, 0, 0, 1, 0, 0, 0, 0…
## $ rebounds_defensive                  <int> 0, 7, 16, 6, 1, 2, 2, 2, 1, 0, 0, 
## $ rebounds_total                      <int> 1, 9, 18, 6, 3, 2, 2, 3, 1, 0, 0, 
## $ assists                             <int> 1, 2, 4, 7, 5, 1, 3, 1, 9, 0, 0, 0…
## $ steals                              <int> 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0…
## $ blocks                              <int> 1, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0…
## $ turnovers                           <int> 1, 5, 4, 1, 4, 0, 0, 0, 0, 0, 0, 0…
## $ fouls_personal                      <int> 1, 4, 1, 1, 1, 2, 1, 3, 1, 0, 0, 0…
## $ points                              <int> 3, 21, 42, 13, 11, 9, 6, 2, 7, 0, 
## $ plus_minus_points                   <dbl> -10, -12, 7, 6, -13, -4, -4, 5, 10…
## $ percentage_field_goals_attempted2pt <dbl> 0.667, 0.700, 0.484, 0.250, 0.636,
## $ percentage_field_goals_attempted3pt <dbl> 0.333, 0.300, 0.516, 0.750, 0.364,
## $ percentage_points2pt                <dbl> 0.667, 0.476, 0.476, 0.154, 0.545,
## $ percentage_points_midrange2pt       <dbl> 0.000, 0.000, 0.000, 0.154, 0.000,
## $ percentage_points3pt                <dbl> 0.000, 0.429, 0.429, 0.692, 0.273,
## $ percentage_points_fast_break        <dbl> 0.000, 0.095, 0.119, 0.000, 0.273,
## $ percentage_points_free_throw        <dbl> 0.333, 0.095, 0.095, 0.154, 0.182,
## $ percentage_points_off_turnovers     <dbl> 0.000, 0.095, 0.071, 0.000, 0.000,
## $ percentage_points_paint             <dbl> 0.667, 0.476, 0.476, 0.000, 0.545,
## $ percentage_assisted2pt              <dbl> 1.000, 0.800, 0.900, 0.000, 0.667,
## $ percentage_unassisted2pt            <dbl> 0.000, 0.200, 0.100, 1.000, 0.333,
## $ percentage_assisted3pt              <dbl> 0.000, 1.000, 1.000, 0.333, 1.000,
## $ percentage_unassisted3pt            <dbl> 0.000, 0.000, 0.000, 0.667, 0.000,
## $ percentage_assisted_fgm             <dbl> 1.000, 0.875, 0.938, 0.250, 0.750,
## $ percentage_unassisted_fgm           <dbl> 0.000, 0.125, 0.063, 0.750, 0.250,
## $ contested_shots                     <int> 3, 5, 11, 1, 6, 9, 3, 3, 2, NA, NA
## $ contested_shots2pt                  <int> 2, 4, 7, 0, 5, 3, 3, 1, 1, NA, NA,
## $ contested_shots3pt                  <int> 1, 1, 4, 1, 1, 6, 0, 2, 1, NA, NA,
## $ deflections                         <int> 0, 0, 3, 1, 4, 1, 0, 0, 2, NA, NA,
## $ charges_drawn                       <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, NA, NA,
## $ screen_assists                      <int> 0, 5, 2, 1, 0, 0, 0, 0, 1, NA, NA,
## $ screen_assist_points                <int> 0, 12, 4, 2, 0, 0, 0, 0, 3, NA, NA
## $ loose_balls_recovered_offensive     <int> 0, 0, 0, 1, 0, 0, 0, 0, 0, NA, NA,
## $ loose_balls_recovered_defensive     <int> 0, 0, 1, 2, 0, 0, 0, 0, 0, NA, NA,
## $ loose_balls_recovered_total         <int> 0, 0, 1, 3, 0, 0, 0, 0, 0, NA, NA,
## $ offensive_box_outs                  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, NA, NA,
## $ defensive_box_outs                  <int> 0, 0, 1, 0, 0, 0, 0, 1, 0, NA, NA,
## $ box_out_player_team_rebounds        <int> 0, 0, 1, 0, 0, 0, 0, 1, 0, NA, NA,
## $ box_out_player_rebounds             <int> 0, 0, 0, 0, 0, 0, 0, 1, 0, NA, NA,
## $ box_outs                            <int> 0, 0, 1, 0, 0, 0, 0, 1, 0, NA, NA,

Nice! Now we have a data frame containing traditional stats, along with detailed scoring stats such as mid-range points and points off turnovers. Additionally, we’ve incorporated hustle stats like deflections and charges drawn, giving us a comprehensive view of the game’s performance. This enriched dataset allows for deeper insights into team and player contributions across different aspects of the game.

Fetching Play-by-Play Data with Rate Limiting

Fetching play-by-play data from the NBA can be resource-intensive, especially when requesting data for many games in quick succession. To ensure that your requests don’t result in timeouts or errors due to rate limiting, FastBreakR incorporates an automatic rate-limiting mechanism.

Below is an example of how to fetch play-by-play data for a specific set of games, using the nba_stats_play_by_play() function. This example demonstrates how to fetch data for a list of game IDs.

Let’s get play-by-play data for that same set of game IDs.

# Fetch the play-by-play data for the same games
play_by_play_data <- nba_stats_play_by_play(games)
## Fetching 5 games in 1 batches
## Fetching batch 1/1: games
## 0022400405 to 0022400409
# Display a glimpse of the play-by-play data
glimpse(play_by_play_data)
## Rows: 2,171
## Columns: 34
## $ game_id                   <chr> "0022400405", "0022400405", "0022400405", "0…
## $ eventnum                  <chr> "2", "4", "7", "8", "10", "11", "12", "13", 
## $ eventmsgtype              <chr> "12", "10", "5", "1", "2", "4", "1", "2", "4…
## $ eventmsgactiontype        <chr> "0", "0", "4", "1", "1", "0", "83", "1", "0"…
## $ period                    <chr> "1", "1", "1", "1", "1", "1", "1", "1", "1",
## $ wctimestring              <chr> "12:08 PM", "12:08 PM", "12:08 PM", "12:09 P…
## $ pctimestring              <chr> "12:00", "12:00", "11:43", "11:29", "11:16",
## $ homedescription           <chr> NA, "Jump Ball Towns vs. Wembanyama: Tip to …
## $ neutraldescription        <chr> "Start of 1st Period (12:08 PM EST)", NA, NA
## $ visitordescription        <chr> NA, NA, "Wembanyama Traveling Turnover (P1.T…
## $ score                     <chr> NA, NA, NA, "0 - 3", NA, NA, "0 - 5", NA, NA
## $ scoremargin               <chr> NA, NA, NA, "3", NA, NA, "5", NA, NA, "3", "…
## $ person1type               <chr> "0", "4", "5", "4", "5", "4", "4", "5", "5",
## $ player1_id                <chr> "0", "1626157", "1641705", "1628969", "16417…
## $ player1_name              <chr> NA, "Karl-Anthony Towns", "Victor Wembanyama…
## $ player1_team_id           <chr> NA, "1610612752", "1610612759", "1610612752"…
## $ player1_team_city         <chr> NA, "New York", "San Antonio", "New York", "…
## $ player1_team_nickname     <chr> NA, "Knicks", "Spurs", "Knicks", "Spurs", "K…
## $ player1_team_abbreviation <chr> NA, "NYK", "SAS", "NYK", "SAS", "NYK", "NYK"…
## $ person2type               <chr> "0", "5", "0", "4", "0", "0", "0", "0", "0",
## $ player2_id                <chr> "0", "1641705", "0", "1628973", "0", "0", "0…
## $ player2_name              <chr> NA, "Victor Wembanyama", NA, "Jalen Brunson"…
## $ player2_team_id           <chr> NA, "1610612759", NA, "1610612752", NA, NA, 
## $ player2_team_city         <chr> NA, "San Antonio", NA, "New York", NA, NA, N
## $ player2_team_nickname     <chr> NA, "Spurs", NA, "Knicks", NA, NA, NA, NA, N
## $ player2_team_abbreviation <chr> NA, "SAS", NA, "NYK", NA, NA, NA, NA, NA, "S…
## $ person3type               <chr> "0", "5", "1", "0", "0", "0", "0", "0", "0",
## $ player3_id                <chr> "0", "1631110", "0", "0", "0", "0", "0", "0"…
## $ player3_name              <chr> NA, "Jeremy Sochan", NA, NA, NA, NA, NA, NA,
## $ player3_team_id           <chr> NA, "1610612759", NA, NA, NA, NA, NA, NA, NA
## $ player3_team_city         <chr> NA, "San Antonio", NA, NA, NA, NA, NA, NA, N
## $ player3_team_nickname     <chr> NA, "Spurs", NA, NA, NA, NA, NA, NA, NA, NA,
## $ player3_team_abbreviation <chr> NA, "SAS", NA, NA, NA, NA, NA, NA, NA, NA, N
## $ video_available_flag      <chr> "0", "1", "1", "1", "1", "1", "1", "1", "1",

Great! Now we’ve got raw play-by-play data for a small subset of games. This data is ready to be analyzed or visualized further. Stay tuned—new functions are being developed to make these tasks even easier, simplifying the process and enhancing your ability to derive insights from the data! Pro tip: Try the nba_data_play_by_play() function to retrieve play-by-play data in an alternate format—great for tracking possessions!

Conclusion

FastBreakR is your go-to tool for NBA data analysis, providing a powerful and expanding set of features. Whether you’re building models, conducting analyses, or exploring trends, this package simplifies the process, helping you access the data you need more quickly and efficiently.

Check back for updates as we continue to expand and improve FastBreakR. Happy analyzing!