Getting Euroleague Basketball stats using euroleagueR
Jason Zivkovic
2023-05-29
Source:vignettes/using-euroleagueR.Rmd
using-euroleagueR.Rmd
Overview
This vignette will outline how to use the functions in the
euroleagueR
package to allow users to obtain clean and tidy
data for matches played in the Euroleague basketball competition.
Installation
Currently, this library is not yet on CRAN, so you can install the
dev version of euroleagueR
from GitHub
with:
# install.packages("remotes")
remotes::install_github("JaseZiv/euroleagueR")
Usage
The following code will show you how to get various different statistics for the Euroleague.
Match Results
To get results of matches players in the Euroleague tournament since
the 2001-2001 season, use the euroleague_results()
function.
This data set will also be important to load in together with any of the following data sets to provide match-level metadata (date, venue, scores, phase type, etc)
results <- euroleague_results()
dplyr::glimpse(results)
#> Rows: 5,622
#> Columns: 57
#> $ id <chr> "8e007873-46b0-5937-b49c-33920f97e335", "315…
#> $ code <chr> "128", "127", "124", "123", "125", "126", "1…
#> $ date <chr> "2001-02-01T20:30:00.000Z", "2001-02-01T19:3…
#> $ season_code <chr> "E2000", "E2000", "E2000", "E2000", "E2000",…
#> $ season_name <chr> "Euroleague 2000-01", "Euroleague 2000-01", …
#> $ season_alias <chr> "2000-01", "2000-01", "2000-01", "2000-01", …
#> $ season_year <chr> "2000", "2000", "2000", "2000", "2000", "200…
#> $ competition_code <chr> "E", "E", "E", "E", "E", "E", "E", "E", "E",…
#> $ competition_name <chr> "Euroleague", "Euroleague", "Euroleague", "E…
#> $ group_id <chr> "43d18792-9e0d-49b5-8d9f-6b89018ff24c", "fc8…
#> $ group_name <chr> "Group First Round 8", "Group First Round 7"…
#> $ group_order <chr> "1", "1", "1", "1", "1", "1", "1", "1", "1",…
#> $ phase_type_code <chr> "PO", "PO", "PO", "PO", "PO", "PO", "PO", "P…
#> $ phase_type_name <chr> "Playoffs", "Playoffs", "Playoffs", "Playoff…
#> $ phase_type_alias <chr> "PLAYOFFS", "PLAYOFFS", "PLAYOFFS", "PLAYOFF…
#> $ phase_type_is_group_phase <chr> "FALSE", "FALSE", "FALSE", "FALSE", "FALSE",…
#> $ round_round <chr> "11", "11", "11", "11", "11", "11", "11", "1…
#> $ round_name <chr> "Round 11", "Round 11", "Round 11", "Round 1…
#> $ round_alias <chr> "Round 11", "Round 11", "Round 11", "Round 1…
#> $ venue_code <chr> "AAF", "AAD", "AAI", "AAM", "AAK", "AAV", "A…
#> $ venue_name <chr> "OLYMPIC BASKETBALL STADIUM", "PALAU BLAUGRA…
#> $ venue_capacity <chr> "18000", "7320", "8120", "8278", "14700", "4…
#> $ venue_address <chr> "list()", "Aristides Maillol Av S/N, 08028 B…
#> $ venue_notes <chr> "list()", "", "", "list()", "", "list()", ""…
#> $ confirmed_date <chr> "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRU…
#> $ confirmed_time <chr> "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRU…
#> $ audience <chr> "1500", "7320", "2000", "5967", "5000", "350…
#> $ audience_confirmed <chr> "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRU…
#> $ code_home <chr> "AEK", "BAR", "PAO", "VIR", "OLY", "PER", "F…
#> $ name_home <chr> "AEK Athens", "FC Barcelona", "PAOK Thessalo…
#> $ abbreviated_name_home <chr> "AEK Athens", "FC Barcelona", "PAOK Thessalo…
#> $ tla_home <chr> "AEK", "FCB", "PBC", "VIR", "OLY", "PER", "F…
#> $ score_home <chr> "69", "85", "75", "113", "94", "79", "76", "…
#> $ standings_score_home <chr> "69", "85", "75", "113", "94", "79", "76", "…
#> $ coach_code_home <chr> "WAG", "WAT", "WAS", "WAF", "WAJ", "WAE", "W…
#> $ coach_name_home <chr> "IVKOVIC, DUSAN", "GARCIA RENESES, AITO", "F…
#> $ q1home <chr> "17", "25", "21", "26", "28", "23", "24", "2…
#> $ q2home <chr> "12", "25", "19", "39", "20", "22", "13", "1…
#> $ q3home <chr> "21", "18", "12", "23", "16", "13", "18", "2…
#> $ q4home <chr> "19", "17", "23", "25", "30", "21", "21", "2…
#> $ code_away <chr> "ZAL", "TRE", "LJU", "EST", "VER", "BAS", "C…
#> $ name_away <chr> "Zalgiris Kaunas", "Benetton Basket", "Union…
#> $ abbreviated_name_away <chr> "Zalgiris Kaunas", "Benetton Basket", "Union…
#> $ tla_away <chr> "ZAL", "TRE", "", "EST", "VER", "BKN", "CIB"…
#> $ score_away <chr> "60", "86", "64", "70", "92", "81", "64", "6…
#> $ standings_score_away <chr> "60", "86", "64", "70", "92", "81", "64", "6…
#> $ coach_code_away <chr> "WAA", "WAK", "WAL", "WAU", "WAP", "WAW", "W…
#> $ coach_name_away <chr> "BRAZYS, ALGIRDAS", "BUCCHI, PIERO", "SAGADI…
#> $ q1away <chr> "14", "21", "17", "22", "21", "26", "20", "1…
#> $ q2away <chr> "17", "23", "22", "12", "18", "18", "28", "1…
#> $ q3away <chr> "7", "24", "13", "17", "29", "23", "9", "12"…
#> $ q4away <chr> "22", "18", "12", "19", "24", "14", "7", "20…
#> $ minute <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
#> $ ot1home <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
#> $ ot1away <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
#> $ ot2home <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
#> $ ot2away <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
Team Box Scores
To get box scores at the team level, use the
euroleague_team_box()
function. This can return team box
score data since the 2010-2011 season, in long form, meaning there will
be two rows for each game - one row per team.
Note, not all fields will contain data for earlier seasons.
# the below will get all available match's team box score data
team_box <- euroleague_team_box(season = c(2010:2022))
glimpse(team_box)
#> Rows: 6,740
#> Columns: 30
#> $ season_code <chr> "E2010", "E2010", "E2010", "E2010", "E2010", "E…
#> $ code <chr> "9", "9", "7", "7", "5", "5", "10", "10", "2", …
#> $ team <chr> "MONTEPASCHI SIENA", "CHOLET BASKET", "REGAL FC…
#> $ team_abbrv <chr> "SIE", "CHO", "BAR", "CIB", "MAL", "CHA", "PAM"…
#> $ coach <chr> "", "", "", "", "", "", "", "", "", "", "", "",…
#> $ quarter1 <int> 22, 12, 17, 12, 16, 24, 15, 17, 31, 11, 19, 17,…
#> $ quarter2 <int> 11, 16, 18, 8, 26, 20, 12, 25, 26, 21, 24, 12, …
#> $ quarter3 <int> 22, 12, 21, 21, 15, 12, 20, 13, 19, 17, 19, 16,…
#> $ quarter4 <int> 21, 4, 24, 25, 27, 17, 9, 17, 18, 29, 11, 17, 1…
#> $ minutes <chr> "200:00", "200:00", "200:00", "200:00", "200:00…
#> $ points <int> 76, 44, 80, 66, 84, 73, 56, 72, 94, 78, 73, 62,…
#> $ field_goals_made2 <int> 22, 13, 25, 20, 20, 21, 10, 16, 20, 27, 15, 16,…
#> $ field_goals_attempted2 <int> 46, 31, 38, 48, 34, 42, 28, 35, 38, 59, 34, 39,…
#> $ field_goals_made3 <int> 4, 3, 7, 5, 10, 8, 7, 7, 11, 4, 6, 3, 7, 14, 11…
#> $ field_goals_attempted3 <int> 17, 20, 20, 15, 23, 23, 18, 21, 24, 13, 19, 17,…
#> $ free_throws_made <int> 20, 9, 9, 11, 14, 7, 15, 19, 21, 12, 25, 21, 12…
#> $ free_throws_attempted <int> 24, 13, 13, 13, 19, 11, 20, 28, 24, 26, 31, 30,…
#> $ offensive_rebounds <int> 18, 12, 7, 13, 7, 15, 6, 11, 12, 19, 14, 16, 14…
#> $ defensive_rebounds <int> 25, 17, 25, 20, 23, 23, 26, 24, 29, 18, 22, 18,…
#> $ total_rebounds <int> 43, 29, 32, 33, 30, 38, 32, 35, 41, 37, 36, 34,…
#> $ assistances <int> 16, 11, 14, 9, 20, 13, 8, 15, 15, 13, 11, 9, 9,…
#> $ steals <int> 10, 6, 11, 13, 7, 9, 1, 13, 2, 9, 10, 13, 0, 8,…
#> $ turnovers <int> 11, 21, 18, 20, 15, 19, 22, 11, 9, 8, 21, 18, 1…
#> $ blocks_favour <int> 3, 3, 4, 0, 0, 0, 2, 3, 2, 2, 7, 3, 1, 1, 5, 2,…
#> $ blocks_against <int> 3, 3, 0, 4, 0, 0, 3, 2, 2, 2, 3, 7, 2, 1, 2, 5,…
#> $ fouls_commited <int> 18, 21, 17, 16, 15, 24, 23, 20, 23, 23, 29, 32,…
#> $ fouls_received <int> 21, 18, 16, 17, 24, 15, 20, 23, 23, 23, 32, 29,…
#> $ valuation <int> 96, 27, 92, 58, 103, 65, 37, 86, 109, 74, 78, 4…
#> $ extra1 <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
#> $ extra2 <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
Now say we want to be able to join on extra information - say the scores, home and away teams, venue, group name, etc, the below code can be used:
rich_team_box <- results |>
select(code, season_code, group_name, phase_type_name, date, code_home, code_away, score_home, score_away, venue_name, coach_name_home, coach_name_away) |>
inner_join(team_box, by = c("season_code", "code"), multiple = "all")
Player Box Scores
To get box scores at the player level, use the
euroleague_player_box()
function. This can return player
box score data since the 2010-2011 season. Note, not all fields will
contain data for earlier seasons.
player_box <- euroleague_player_box(season = c(2020:2022))
glimpse(player_box)
#> Rows: 22,637
#> Columns: 31
#> $ season_code <chr> "E2020", "E2020", "E2020", "E2020", "E2020", "E…
#> $ code <chr> "9", "9", "9", "9", "9", "9", "9", "9", "9", "9…
#> $ player_team <chr> "TD SYSTEMS BASKONIA VITORIA-GASTEIZ", "TD SYST…
#> $ player_team_abbrv <chr> "BAS", "BAS", "BAS", "BAS", "BAS", "BAS", "BAS"…
#> $ player_coach <chr> "IVANOVIC, DUSKO", "IVANOVIC, DUSKO", "IVANOVIC…
#> $ player_id <chr> "P008850 ", "P007947 ", "P009733 ", "P006…
#> $ is_starter <int> 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1,…
#> $ is_playing <int> 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0,…
#> $ team <chr> "BAS", "BAS", "BAS", "BAS", "BAS", "BAS", "BAS"…
#> $ dorsal <chr> "2", "3", "5", "7", "8", "12", "19", "25", "30"…
#> $ player <chr> "RAIESTE, SANDER", "VILDOZA, LUCA", "JEKIRI, TO…
#> $ minutes <chr> "10:41", "27:37", "21:23", "33:25", "04:54", "1…
#> $ points <int> 0, 12, 1, 23, 0, 5, 1, 18, 0, 12, 4, 0, 0, 5, 3…
#> $ field_goals_made2 <int> 0, 3, 0, 5, 0, 0, 0, 4, 0, 4, 2, 0, 0, 0, 0, 1,…
#> $ field_goals_attempted2 <int> 1, 7, 5, 7, 0, 1, 0, 7, 0, 9, 3, 0, 1, 1, 0, 2,…
#> $ field_goals_made3 <int> 0, 1, 0, 2, 0, 1, 0, 2, 0, 1, 0, 0, 0, 1, 1, 1,…
#> $ field_goals_attempted3 <int> 0, 4, 0, 4, 0, 1, 0, 3, 0, 3, 2, 0, 0, 4, 5, 1,…
#> $ free_throws_made <int> 0, 3, 1, 7, 0, 2, 1, 4, 0, 1, 0, 0, 0, 2, 0, 0,…
#> $ free_throws_attempted <int> 0, 4, 2, 8, 0, 2, 2, 4, 0, 1, 0, 0, 0, 2, 0, 0,…
#> $ offensive_rebounds <int> 1, 0, 0, 0, 0, 1, 0, 2, 0, 3, 1, 0, 0, 1, 0, 0,…
#> $ defensive_rebounds <int> 2, 1, 4, 2, 0, 1, 1, 4, 0, 2, 8, 0, 0, 3, 1, 2,…
#> $ total_rebounds <int> 3, 1, 4, 2, 0, 2, 1, 6, 0, 5, 9, 0, 0, 4, 1, 2,…
#> $ assistances <int> 0, 4, 0, 6, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1,…
#> $ steals <int> 0, 1, 0, 2, 0, 0, 0, 0, 0, 3, 2, 0, 0, 2, 0, 0,…
#> $ turnovers <int> 0, 4, 5, 0, 1, 2, 1, 0, 0, 1, 0, 0, 2, 1, 1, 2,…
#> $ blocks_favour <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,…
#> $ blocks_against <int> 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0,…
#> $ fouls_commited <int> 3, 1, 2, 3, 1, 2, 1, 3, 0, 1, 2, 1, 0, 2, 0, 5,…
#> $ fouls_received <int> 2, 3, 2, 7, 0, 2, 2, 3, 0, 5, 1, 0, 0, 4, 4, 2,…
#> $ valuation <int> 1, 8, -7, 32, -2, 3, 1, 21, 0, 15, 15, -1, -3, …
#> $ plusminus <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
Play-by-Play data
To get play-by-play data, use the euroleague_pbp()
function. This can return play-by-play data since the 2010-2011 season.
Note, not all fields will contain data for earlier seasons.
pbp <- euroleague_pbp(season = c(2021:2022))
glimpse(pbp)
#> Rows: 324,652
#> Columns: 42
#> $ code <chr> "9", "9", "9", "9", "9", "9", "9", "9", "9", "9", "9", "9…
#> $ season_code <chr> "E2021", "E2021", "E2021", "E2021", "E2021", "E2021", "E2…
#> $ team_a <chr> "FC Barcelona", "FC Barcelona", "FC Barcelona", "FC Barce…
#> $ team_b <chr> "ALBA Berlin", "ALBA Berlin", "ALBA Berlin", "ALBA Berlin…
#> $ code_team_a <chr> "BAR ", "BAR ", "BAR ", "BAR ", "…
#> $ code_team_b <chr> "BER ", "BER ", "BER ", "BER ", "…
#> $ num_quarters <int> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, …
#> $ type <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
#> $ numberofplay <int> 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 1…
#> $ codeteam <chr> " ", "BER ", "BAR ", "BER ", "…
#> $ player_id <chr> " ", "P006589 ", "P007870 ", " ", "…
#> $ playtype <chr> "BP", "TPOFF", "TPOFF", "JB", "2FGA", "D", "CM", "RV", "F…
#> $ player <chr> NA, "SIKMA, LUKE", "DAVIES, BRANDON", NA, "SIKMA, LUKE", …
#> $ team <chr> NA, "ALBA Berlin", "FC Barcelona", "ALBA Berlin", "ALBA B…
#> $ dorsal <chr> NA, "43", "0", "", "43", "33", "8", "22", "22", "22", "8"…
#> $ minute <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, …
#> $ markertime <chr> "", "09:59", "09:59", "09:59", "09:40", "09:38", "09:29",…
#> $ comment <chr> "", "", "", "", "", "", "", "", "", "", "", "", "", "", "…
#> $ playinfo <chr> "Begin Period", "", "", "", "Missed Two Pointer (0/1 - 0…
#> $ points_b <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ points_a <int> NA, NA, NA, NA, NA, NA, NA, NA, 1, 2, NA, 5, NA, NA, 7, N…
#> $ MatchCode <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ SeasonCode <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ TeamA <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ TeamB <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ CodeTeamA <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ CodeTeamB <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ NumQuarters <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ TYPE <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ NUMBEROFPLAY <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ CODETEAM <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ PLAYER_ID <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ PLAYTYPE <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ MINUTE <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ MARKERTIME <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ COMMENT <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ PLAYINFO <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ TEAM <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ DORSAL <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ PLAYER <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ POINTS_B <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
#> $ POINTS_A <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
Shots data
To get shot location and type data, use the
euroleague_shots()
function. This can return shooting data
since the 2010-2011 season. Note, not all fields will contain data for
earlier seasons.
shots <- euroleague_shots(season = 2022)
glimpse(shots)
#> Rows: 49,409
#> Columns: 40
#> $ code <chr> "9", "9", "9", "9", "9", "9", "9", "9", "9", "9", …
#> $ season_code <chr> "E2022", "E2022", "E2022", "E2022", "E2022", "E202…
#> $ num_anot <int> 4, 9, 12, 15, 19, 24, 26, 28, 29, 31, 35, 39, 42, …
#> $ team <chr> "VIR ", "MCO ", "MCO ", "MCO …
#> $ id_player <chr> "P002581 ", "PLCZ ", "P005985 ", "P009754…
#> $ player <chr> "JAITEH, MAM", "MOTIEJUNAS, DONATAS", "JAMES, MIKE…
#> $ id_action <chr> "2FGM", "2FGA", "3FGA", "3FGA", "2FGA", "FTM", "3F…
#> $ action <chr> "Two Pointer", "Missed Two Pointer", "Missed Three…
#> $ points <int> 2, 0, 0, 0, 0, 1, 3, 2, 2, 2, 0, 2, 2, 2, 0, 1, 0,…
#> $ coord_x <int> -100, 50, 62, -595, 56, -1, -608, -37, -175, -150,…
#> $ coord_y <int> 150, 207, 765, 464, 112, -1, 357, 213, 119, 432, 1…
#> $ zone <chr> "B", "C", "I", "H", "C", " ", "H", "B", "B", "F", …
#> $ minute <int> 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5,…
#> $ console <chr> "09:45", "09:27", "09:01", "08:46", "08:27", "08:1…
#> $ points_a <int> 2, 2, 2, 2, 2, 3, 3, 5, 5, 7, 7, 7, 7, 9, 9, 10, 1…
#> $ points_b <int> 0, 0, 0, 0, 0, 0, 3, 3, 5, 5, 5, 7, 9, 9, 9, 9, 9,…
#> $ fastbreak <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", …
#> $ second_chance <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", …
#> $ points_off_turnover <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", …
#> $ utc <chr> "20221007183052", "20221007183139", "2022100718321…
#> $ GAMECODE <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ SEASON <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ NUM_ANOT <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ TEAM <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ ID_PLAYER <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ PLAYER <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ ID_ACTION <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ ACTION <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ POINTS <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ COORD_X <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ COORD_Y <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ ZONE <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ FASTBREAK <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ SECOND_CHANCE <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ POINTS_OFF_TURNOVER <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ MINUTE <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ CONSOLE <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ POINTS_A <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ POINTS_B <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ UTC <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…