rvolleydataThis vignette will outline how to use the functions in the
rvolleydata package to access data from League One Volleyball Pro
(LOVB), Athletes
Unlimited Pro Volleyball (AU), and Major League Volleyball (MLV)
leagues.
You can install the development version of rvolleydata
from GitHub
with:
The following code snippets will provide information on how to access different volleyball league statistics. Each function has an identical signature where the user specifies their league of interest and the season(s).
Use load_schedule to access league schedules.
schedule <- load_schedule("au", 2025)
glimpse(schedule)
#> Rows: 31
#> Columns: 10
#> $ season <dbl> 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 202…
#> $ date <date> 2025-09-29, 2025-09-29, 2025-09-29, 2025-09-29, 20…
#> $ home_team <chr> "Team Bergmark", "Team Bergmark", "Team Bell", "Tea…
#> $ away_team <chr> "Team Zilio Pereira", "Team Zilio Pereira", "Team H…
#> $ home_team_set_wins <dbl> 2, 0, 1, 0, 2, 1, 2, 0, 3, 1, 2, 2, 2, 1, 2, 3, 1, …
#> $ away_team_set_wins <dbl> 1, 0, 2, 0, 1, 2, 1, 3, 0, 2, 1, 1, 1, 2, 1, 0, 2, …
#> $ result <chr> "2:1", "0:0", "1:2", "0:0", "2:1", "1:2", "2:1", "0…
#> $ match_id <dbl> 2249762, 2249974, 2249761, 2249973, 2249760, 224975…
#> $ phase <chr> "AU Test 2025", "AU Test 2025", "AU Test 2025", "AU…
#> $ league <chr> "au", "au", "au", "au", "au", "au", "au", "au", "au…Use load_pbp to access play-by-play data.
pbp <- load_pbp("lovb", 2025)
glimpse(pbp)
#> Rows: 73,416
#> Columns: 15
#> $ match_id <dbl> 2161068, 2161068, 2161068, 2161068, 2161068, 2161068, 2…
#> $ season <dbl> 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2…
#> $ match_datetime <dttm> 2025-01-09 00:30:00, 2025-01-09 00:30:00, 2025-01-09 0…
#> $ home_team_name <chr> "LOVB Atlanta", "LOVB Atlanta", "LOVB Atlanta", "LOVB A…
#> $ away_team_name <chr> "LOVB Salt Lake", "LOVB Salt Lake", "LOVB Salt Lake", "…
#> $ team_involved <chr> "home", "away", "away", "away", "home", "home", "away",…
#> $ jersey_number <dbl> 10, 17, 1, 11, 23, 77, 12, 10, 12, 1, 12, 1, 16, 10, 15…
#> $ action <chr> "S", "R", "E", "A", "D", "E", "A", "S", "R", "E", "A", …
#> $ outcome <chr> "-", "#", "+", "-", "#", "/", "=", "-", "+", "#", "#", …
#> $ set <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
#> $ point_number <dbl> 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4…
#> $ point_winner <chr> "home", "home", "home", "home", "home", "home", "home",…
#> $ home_score <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2…
#> $ away_score <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2…
#> $ league <chr> "lovb", "lovb", "lovb", "lovb", "lovb", "lovb", "lovb",…Use load_officials to access officials data.
officials <- load_officials("mlv", 2025)
glimpse(officials)
#> Rows: 368
#> Columns: 9
#> $ match_id <dbl> 2160917, 2160917, 2160917, 2160917, 2160918, 2160918, 2…
#> $ season <dbl> 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2…
#> $ match_datetime <dttm> 2025-01-11 01:00:00, 2025-01-11 01:00:00, 2025-01-11 0…
#> $ officials_type <chr> "referee1", "referee2", "scorer1", "scorer2", "referee1…
#> $ full_name <chr> "Bill Stanley", "Suzanne Lowry", "Nicole Conway", "Kaci…
#> $ first_name <chr> "Bill", "Suzanne", "Nicole", "Kacie", "LANDRY", "DEVONI…
#> $ last_name <chr> "Stanley", "Lowry", "Conway", "Hoppe", "HOMSHER", "MCLA…
#> $ level <chr> "AAA", "AAA", "A", "A", "USA", "USA", "USA", "USA", "PV…
#> $ league <chr> "mlv", "mlv", "mlv", "mlv", "mlv", "mlv", "mlv", "mlv",…Use load_player_info to access player information.
player_info <- load_player_info("au", 2025)
glimpse(player_info)
#> Rows: 682
#> Columns: 29
#> $ match_id <dbl> 2249759, 2249759, 2249759, 2249759, 2249759, 2…
#> $ season <dbl> 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025…
#> $ match_datetime <dttm> 2025-09-28 21:00:00, 2025-09-28 21:00:00, 202…
#> $ player_id <dbl> 1127, 997, 1117, 993, 1124, 986, 996, 1196, 76…
#> $ player_name <chr> "Guedpard Pornpun", "Emily Thater", "Serena Gr…
#> $ first_name <chr> "Guedpard", "Emily", "Serena", "Manami", "Tess…
#> $ last_name <chr> "Pornpun", "Thater", "Gray", "Kojima", "Grubbs…
#> $ jersey_number <dbl> 3, 14, 15, 16, 17, 18, 19, 30, 31, 42, 81, 2, …
#> $ primary_position <dbl> 5, 4, 4, 1, 3, 3, 2, 2, 5, 4, 2, 5, 4, 2, 5, 2…
#> $ roster_status <chr> "active", "active", "active", "active", "activ…
#> $ is_foreign <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALS…
#> $ is_confederation <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALS…
#> $ is_captain <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE…
#> $ is_libero <lgl> FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE…
#> $ set_1_is_starter <lgl> TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FA…
#> $ set_1_starting_position <dbl> 1, 6, 3, NA, NA, 4, 5, NA, NA, NA, 2, 1, 6, NA…
#> $ set_2_is_starter <lgl> TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, …
#> $ set_2_starting_position <dbl> 1, 6, NA, NA, NA, 4, NA, 5, NA, 3, 2, NA, 4, 6…
#> $ set_3_is_starter <lgl> FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, …
#> $ set_3_starting_position <dbl> NA, NA, 6, NA, 4, NA, 5, 2, 1, 3, NA, NA, NA, …
#> $ set_4_is_starter <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ set_4_starting_position <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ set_5_is_starter <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ set_5_starting_position <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ team_name <chr> "Team Bell", "Team Bell", "Team Bell", "Team B…
#> $ team_short_name <chr> "ORA", "ORA", "ORA", "ORA", "ORA", "ORA", "ORA…
#> $ team_code <chr> "602", "602", "602", "602", "602", "602", "602…
#> $ team_color <chr> "cadmiumOrange", "cadmiumOrange", "cadmiumOran…
#> $ league <chr> "au", "au", "au", "au", "au", "au", "au", "au"…Use load_team_staff to access team staff data.
team_staff <- load_team_staff("lovb", 2025)
glimpse(team_staff)
#> Rows: 242
#> Columns: 9
#> $ match_id <dbl> 2161068, 2161068, 2161068, 2161068, 2161068, 2161068, 2…
#> $ season <dbl> 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2…
#> $ match_datetime <dttm> 2025-01-09 00:30:00, 2025-01-09 00:30:00, 2025-01-09 0…
#> $ team_name <chr> "LOVB Atlanta", "LOVB Atlanta", "LOVB Atlanta", "LOVB S…
#> $ staff_type <chr> "coach", "assistant", "assistant", "coach", "assistant"…
#> $ full_name <chr> "Paulo Coco", "Yoko Zetterlund", "Angela Gonzalez", "Ta…
#> $ first_name <chr> "Paulo", "Yoko", "Angela", "Tama", "Bruno", "Kolin", "M…
#> $ last_name <chr> "Coco", "Zetterlund", "Gonzalez", "Miyashiro", "Chateau…
#> $ league <chr> "lovb", "lovb", "lovb", "lovb", "lovb", "lovb", "lovb",…Use load_events_log to access events log data.
events_log <- load_events_log("mlv", 2025)
glimpse(events_log)
#> Rows: 36,784
#> Columns: 52
#> $ match_id <dbl> 2160916, 2160916, 2160916, 2160916, 21…
#> $ season <dbl> 2025, 2025, 2025, 2025, 2025, 2025, 20…
#> $ match_datetime <dttm> 2025-01-10, 2025-01-10, 2025-01-10, 2…
#> $ set <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
#> $ set_start_time <dttm> 2025-01-09 23:49:00, 2025-01-09 23:49…
#> $ set_end_time <dttm> 2025-01-10 00:29:00, 2025-01-10 00:29…
#> $ set_duration <dbl> 39, 39, 39, 39, 39, 39, 39, 39, 39, 39…
#> $ set_final_home_score <dbl> 25, 25, 25, 25, 25, 25, 25, 25, 25, 25…
#> $ set_final_away_score <dbl> 18, 18, 18, 18, 18, 18, 18, 18, 18, 18…
#> $ event_type <chr> "libero", "libero", "rally", "libero",…
#> $ event_time <dttm> 2025-01-10 00:04:42, 2025-01-10 00:04…
#> $ libero_enters <lgl> TRUE, TRUE, NA, FALSE, NA, FALSE, TRUE…
#> $ team_involved <chr> "home", "away", NA, "away", NA, "home"…
#> $ libero_jersey_number <dbl> 5, 2, NA, 2, NA, 5, 2, NA, 5, NA, NA, …
#> $ libero_substitute_jersey_number <dbl> 11, 7, NA, 7, NA, 11, 26, NA, 15, NA, …
#> $ rally_start_time <dttm> NA, NA, 2025-01-10 00:05:12, NA, 2025…
#> $ rally_end_time <dttm> NA, NA, 2025-01-10 00:05:26, NA, 2025…
#> $ rally_point_winner <chr> NA, NA, "away", NA, "home", NA, NA, "a…
#> $ substitute_in_jersey_number <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ substitute_out_jersey_number <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ challenge_approved <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ challenge_reason <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ challenge_method <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ challenge_response <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ challenge_at_home_score <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ challenge_at_away_score <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ challenge_score_change <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ serving_team <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ current_home_score <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ current_away_score <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ home_team_p1 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ home_team_p2 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ home_team_p3 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ home_team_p4 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ home_team_p5 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ home_team_p6 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ away_team_p1 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ away_team_p2 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ away_team_p3 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ away_team_p4 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ away_team_p5 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ away_team_p6 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ verified_time <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ verified_method <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ sanction_type <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ sanction_remark <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ sanction_staff_role <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ staff_first_name <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ staff_last_name <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ staff_type <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ is_exceptional <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ league <chr> "mlv", "mlv", "mlv", "mlv", "mlv", "ml…Use load_player_boxscore to access player boxscore
data.
player_boxscores <- load_player_boxscore("au", 2025)
glimpse(player_boxscores)
#> Rows: 1,563
#> Columns: 37
#> $ match_id <dbl> 2249759, 2249759, 2249759, 2249759, 2249759, …
#> $ season <dbl> 2025, 2025, 2025, 2025, 2025, 2025, 2025, 202…
#> $ match_datetime <dttm> 2025-09-28 21:00:00, 2025-09-28 21:00:00, 20…
#> $ team_involved <chr> "home", "home", "home", "home", "home", "home…
#> $ team_name <chr> "Team Bell", "Team Bell", "Team Bell", "Team …
#> $ player_name <chr> "Serena Gray", "Serena Gray", "Serena Gray", …
#> $ first_name <chr> "Serena", "Serena", "Serena", "Manami", "Mana…
#> $ last_name <chr> "Gray", "Gray", "Gray", "Kojima", "Kojima", "…
#> $ sets_played <dbl> 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, …
#> $ player_number <dbl> 15, 15, 15, 16, 16, 16, 19, 19, 19, 3, 3, 81,…
#> $ is_captain <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FAL…
#> $ is_libero <lgl> FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE,…
#> $ set_number <dbl> 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 1, 2, 1, 2, …
#> $ set_starting_position <chr> "3", NA, "6", "*", "*", "*", "5", NA, "5", "1…
#> $ serves <dbl> 6, NA, 3, 0, 0, 0, 2, NA, 2, 5, 5, 7, 3, NA, …
#> $ serve_errors <dbl> 2, NA, 0, 0, 0, 0, 0, NA, 0, 0, 0, 1, 2, NA, …
#> $ serve_aces <dbl> 1, NA, 1, 0, 0, 0, 0, NA, 0, 0, 0, 0, 0, NA, …
#> $ serve_efficiency <dbl> -0.167, NA, 0.667, NA, NA, NA, 0.000, NA, 0.5…
#> $ attack_attempts <dbl> 2, NA, 3, 0, 0, 0, 6, NA, 13, 0, 0, 7, 8, NA,…
#> $ attack_errors <dbl> 0, NA, 0, 0, 0, 0, 0, NA, 3, 0, 0, 0, 0, NA, …
#> $ attack_kills <dbl> 2, NA, 1, 0, 0, 0, 3, NA, 1, 0, 0, 3, 1, NA, …
#> $ attack_success_ratio <dbl> 1.00, NA, 0.33, NA, NA, NA, 0.50, NA, 0.08, N…
#> $ attack_efficiency <dbl> 1.000, NA, 0.333, NA, NA, NA, 0.500, NA, -0.2…
#> $ receptions <dbl> 0, NA, 2, 0, 2, 1, 5, NA, 7, 0, 0, 7, 12, NA,…
#> $ reception_errors <dbl> 0, NA, 1, 0, 0, 1, 0, NA, 2, 0, 0, 0, 1, NA, …
#> $ positive_reception_ratio <dbl> NA, NA, 0.50, NA, 0.50, 0.00, 0.80, NA, 0.14,…
#> $ perfect_reception_ratio <dbl> NA, NA, 0.00, NA, 0.50, 0.00, 0.20, NA, 0.14,…
#> $ block_points <dbl> 2, NA, 1, 0, 0, 0, 0, NA, 0, 0, 0, 0, 0, NA, …
#> $ block_touches <dbl> 0, NA, 3, 0, 0, 0, 0, NA, 0, 0, 0, 0, 1, NA, …
#> $ earned_points <dbl> 5, NA, 3, 0, 0, 0, 3, NA, 1, 0, 0, 3, 1, NA, …
#> $ net_points <dbl> 3, NA, 2, 0, 0, -1, 3, NA, -4, 0, 0, 2, -2, N…
#> $ assists <dbl> 0, NA, 0, 1, 0, 0, 0, NA, 0, 12, 8, 0, 0, NA,…
#> $ successful_digs <dbl> 0, NA, 3, 3, 4, 4, 0, NA, 1, 3, 3, 0, 1, NA, …
#> $ id <chr> "68d99179b1659f25ae13f696", "68d99179b1659f25…
#> $ spike_hp <dbl> 0, NA, 0, 0, 0, 0, 0, NA, 1, 0, 0, 0, 1, NA, …
#> $ points <dbl> 3, NA, 1, 0, 0, 0, 0, NA, 1, 0, 0, 1, 0, NA, …
#> $ league <chr> "au", "au", "au", "au", "au", "au", "au", "au…Use load_team_boxscore to access team boxscore data.
team_boxscores <- load_team_boxscore("mlv", 2025)
glimpse(team_boxscores)
#> Rows: 918
#> Columns: 29
#> $ match_id <dbl> 2160916, 2160916, 2160916, 2160916, 2160916, …
#> $ season <dbl> 2025, 2025, 2025, 2025, 2025, 2025, 2025, 202…
#> $ match_datetime <dttm> 2025-01-10 00:00:00, 2025-01-10 00:00:00, 20…
#> $ team_involved <chr> "home", "home", "home", "away", "away", "away…
#> $ team_name <chr> "Orlando Valkyries", "Orlando Valkyries", "Or…
#> $ set_number <dbl> 1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 5, 1, 2, 3, 4, …
#> $ serves <dbl> 25, 24, 26, 18, 19, 22, 22, 25, 22, 25, 15, 2…
#> $ serve_errors <dbl> 1, 2, 5, 5, 4, 1, 4, 2, 1, 3, 1, 5, 1, 3, 2, …
#> $ serve_aces <dbl> 1, 2, 1, 0, 0, 1, 0, 1, 2, 0, 0, 0, 1, 1, 1, …
#> $ serve_efficiency <dbl> 0.040, 0.000, -0.154, -0.222, -0.211, 0.136, …
#> $ attack_attempts <dbl> 27, 37, 52, 38, 38, 50, 46, 37, 40, 41, 23, 4…
#> $ attack_errors <dbl> 2, 0, 3, 2, 3, 7, 5, 4, 0, 4, 1, 4, 4, 2, 3, …
#> $ attack_kills <dbl> 14, 15, 15, 14, 15, 10, 13, 12, 9, 15, 11, 13…
#> $ attack_success_ratio <dbl> 0.52, 0.41, 0.29, 0.37, 0.39, 0.20, 0.28, 0.3…
#> $ attack_efficiency <dbl> 0.407, 0.378, 0.231, 0.237, 0.289, 0.040, 0.1…
#> $ receptions <dbl> 13, 15, 21, 24, 22, 21, 20, 18, 22, 20, 12, 1…
#> $ reception_errors <dbl> 0, 0, 1, 1, 2, 1, 0, 1, 1, 1, 0, 0, 1, 2, 0, …
#> $ positive_reception_ratio <dbl> 0.46, 0.47, 0.48, 0.46, 0.55, 0.43, 0.45, 0.2…
#> $ perfect_reception_ratio <dbl> 0.23, 0.33, 0.29, 0.08, 0.23, 0.33, 0.10, 0.1…
#> $ block_points <dbl> 3, 1, 1, 1, 1, 0, 0, 6, 4, 3, 0, 1, 2, 7, 1, …
#> $ block_touches <dbl> 5, 2, 3, 1, 8, 5, 6, 6, 2, 3, 2, 4, 4, 5, 3, …
#> $ earned_points <dbl> 18, 18, 17, 15, 16, 11, 13, 19, 15, 18, 11, 1…
#> $ net_points <dbl> 15, 16, 7, 7, 7, 2, 4, 12, 13, 10, 9, 5, 7, 1…
#> $ assists <dbl> 12, 14, 14, 14, 14, 10, 12, 10, 9, 14, 11, 13…
#> $ successful_digs <dbl> 15, 15, 29, 9, 19, 31, 23, 18, 20, 16, 12, 23…
#> $ id <chr> "6780447a19c53e576a0e9ec0", "6780447a19c53e57…
#> $ spike_hp <dbl> 1, 1, 0, 3, 1, 1, 1, 2, 7, 1, 0, 0, 6, 4, 3, …
#> $ points <dbl> 8, 8, 5, 1, 4, 4, 4, 9, 6, 6, 3, 4, 5, 10, 4,…
#> $ league <chr> "mlv", "mlv", "mlv", "mlv", "mlv", "mlv", "ml…