Skip to contents

Season stats of every defenseman and forward of one season stage.

Usage

vhl_skater_stats(season, stage = "regular", return_parsed = TRUE)

Arguments

season

Season END year (2026 = 2025/26; the calendar covers 2010/11 on). With stage it is mapped to the site's tournament id, see vhl_tn().

stage

Season stage: "regular" (default) or "playoff".

return_parsed

TRUE (default) returns the parsed tibble; FALSE returns the page's parsed record (a named list, the sdv-internal-refs capture shape, plus _request with the season, stage, tn and the ids asked for).

Value

A fastRhockey_data tibble with one row per skater and team:

col_nametypedescription
seasonintegerSeason END year (2026 = 2025/26).
stagecharacterSeason stage: regular or playoff.
tnintegerTournament id of the season stage (2025/26 regular season = 1374, playoffs = 1375); vhl_tn maps season + stage to it.
position_groupcharacterPosition group: defense or forward.
player_idintegerPlayer id: the {player_id} of /en/players/{player_id}/, stable across seasons and teams; also the photo id on img.khl.ru. Same numeric sequence as khl.ru player ids; whether it equals the same person's khl.ru id is unverified.
playercharacterPlayer name, 'Surname Given' (Latin on /en/ pages).
jerseyintegerJersey number (#; the page legend mislabels this column 'Position').
teamcharacterTeam short name (Latin; the report tables' form).
games_playedintegerGames played (GP).
goalsintegerGoals (G) the player scored in the row's scope: the game in a box score, the season stage in stats and career rows.
assistsintegerAssists (A) credited to the player in the row's scope: the game in a box score, the season stage in stats and career rows.
pointsintegerPoints, goals + assists (PTS).
plus_minusintegerPlus/minus (+/-).
plusintegerPlus: on-ice goals for that count toward plus/minus (+).
minusintegerMinus: on-ice goals against that count toward plus/minus (-).
penalty_minutesintegerPenalty minutes (PIM).
even_strength_goalsintegerEven-strength goals (ESG).
power_play_goalsintegerPower-play goals (PPG).
shorthanded_goalsintegerShorthanded goals (SHG).
overtime_goalsintegerOvertime goals (OTG).
game_winning_goalsintegerGame-winning goals (GWG).
shootout_deciding_goalsintegerShootout-deciding goals (SDS; the legend says 'Shootouts deciding shots').
shots_on_goalintegerShots on goal (SOG).
shot_pctnumericShooting percentage, goals / shots on goal x 100 (%SOG); 0-100 scale; null when the page shows '-'.
shots_per_gamenumericShots on goal per game (S/G).
faceoffsintegerFaceoffs taken (FO).
faceoffs_wonintegerFaceoffs won (FOW).
faceoff_pctnumericFaceoff win percentage (%FO); 0-100 scale; null when the page shows '-' (no faceoffs taken).
toi_per_gamecharacterAverage time on ice per game (TOI/G), 'm:ss' / 'mm:ss' string; null when the page shows '-'.
shifts_per_gamenumericAverage shifts per game (Sft/G); integer in a one-game report, decimal in season tables.
hitsintegerBody checks delivered (Hits).
blocked_shotsintegerBlocked shots (BLS).

With return_parsed = FALSE, the page's parsed record (a named list) instead.

Details

Source: GET https://www.vhlru.ru/en/stats/players/{season}/ (server-rendered HTML, keyless; parsed with rvest). Unofficial use of a public source; payloads are not redistributed.

Owner flag (sanctions)

The VHL is run by Russian league operators, and several clubs are owned or sponsored by sanctioned state companies. Fetching on your own machine is fine; a published data release or a hosted mirror of this data needs the owner's sanctions / legal sign-off first.

Errors

  • fastRhockey_no_data: the VHL has nothing for the request (a season without that stage, a game not in the season's calendar, an unknown game, player or team page).

  • fastRhockey_bad_request: a bad season / stage / id, a missing argument, or HTTP 400 / 422.

  • fastRhockey_asset_fetch: the page could not be fetched, or it is not the page asked for (another season, game or player; a missing table or header drift).

Examples

# \donttest{
  try(vhl_skater_stats(season = 2026))
#> ── VHL Skater Stats Information from vhlru.ru ──────── fastRhockey 1.0.0.9000 ──
#> ℹ Data updated: 2026-10-13 02:00:41 UTC
#> # A tibble: 1,140 × 32
#>    season stage     tn position_group player_id player jersey team  games_played
#>     <int> <chr>  <int> <chr>              <int> <chr>   <int> <chr>        <int>
#>  1   2026 regul…  1374 defense            22129 Miney…     51 Meta…           49
#>  2   2026 regul…  1374 defense            15836 Berdy…     38 Omsk…           55
#>  3   2026 regul…  1374 defense            24805 Trish…     17 Ryaz…           55
#>  4   2026 regul…  1374 defense            22248 Popov…     11 Rubin           43
#>  5   2026 regul…  1374 defense            34892 Budni…     85 Toros           59
#>  6   2026 regul…  1374 defense            20642 Naumo…      8 Meta…           60
#>  7   2026 regul…  1374 defense            30974 Stikh…     55 Rubin           57
#>  8   2026 regul…  1374 defense            35793 Boldy…     83 Kris…           57
#>  9   2026 regul…  1374 defense            13985 Ivano…      3 Khim…           36
#> 10   2026 regul…  1374 defense            25729 Stari…     75 Meta…           54
#> # ℹ 1,130 more rows
#> # ℹ 23 more variables: goals <int>, assists <int>, points <int>,
#> #   plus_minus <int>, plus <int>, minus <int>, penalty_minutes <int>,
#> #   even_strength_goals <int>, power_play_goals <int>, shorthanded_goals <int>,
#> #   overtime_goals <int>, game_winning_goals <int>,
#> #   shootout_deciding_goals <int>, shots_on_goal <int>, shot_pct <dbl>,
#> #   shots_per_game <dbl>, faceoffs <int>, faceoffs_won <int>, …
# }