Sebastian Carl

@mrcaseb.com

Football 🏈 in the #nflverse | #rstats | #dataviz | #engineering | Justin Herbert is Elite https://mrcaseb.com/

🚨🚨 UPDATE RELEASED 🚨🚨 nflfastR package 📦 v6.0.0 is now live on CRAN. Updates include -- a completely revamped database function update_pbp_db, -- full support for 2026 pbp data, -- various bugfixes, and -- lots of improvements to the stats function calculate_stats()

nflfastR 6.0.0
CRAN release: 2026-09-18

New
Added new function update_pbp_db(), a fresh approach to the database helper. (#544)
Breaking changes and deprecation
nflfastR stopped supporting the 1999 and 2000 seasons because of inconsistent data sources. Data is still available through load_pbp() but we will not fix any issues related to those old seasons anymore. It’s possible to install nflfastR v5.2.0 (with pak::pak("nflverse/nflfastR@v5.2.0")) to parse those seasons if necessary. (#568)
nflfastR now loads raw play-by-play data from season based releases in the nflverse/nflverse-pbp GitHub repository. The legacy repository nflverse/nflfastR-raw is deprecated and won’t update in future seasons. This means that previous nflfastR versions won’t be able to download 2026+ seasons! (#589)
The legacy player stats functions calculate_player_stats*() have been deprecated in 2024 with the release of nflfastR 5.0. They are now defunct and calling them will throw an error. (#590)Minor changes and improvements
Added "game_id" to the output calculate_stats() if summary_level == "week". (#566)
Fixed a bug where fixed_drive did not increment after a muffed blocked field goal attempt. Yes this happened in "2025_10_NO_CAR", play id 2504. (#567)
Implemented a fresh approach to compute play_type based on play_type_nfl for faster and more consistent output. (#568)
Fixed a bug where nflfastR overwrote the kickoff_attempt variable in the event of a penalty on a kickoff. (#569)
Added various definitions of ‘explosive’ plays to the output of calculate_stats(). It counts passes, runs, and receptions with 10+, 20+, 40+ yards gained as well as 12+ yard runs and 16+ yard passes. (#573)
Added several punting stats to the output of calculate_stats(). (#574)
Added overall fumble counters to the output of calculate_stats() because it was missing some edge case fumbles on offense. (#575)
The play_type variable now possibly shows "pass" or "run" on 2 point conversion plays with a post-snap penalty enforced between downs. This is different from play_type_nfl (which will show "PENALTY" in these cases). (#579)
Fixed bug where calculate_stats() counted fumble recoveries in fumble_recovery_yards_own and fumble_recovery_yards_opp instead of the corresponding yards. (#584)
Fixed bug where calculate_stats() counted some blocked punts as punt attempts that officially do not count as punt attempts. (#584)
Fixed bug where calculate_stats() overcounted first downs in some edge cases. (#587)
Updated teams_colors_logos after 2026 Titans and Rams rebrandings. (#592)
Added defensive blocked kicks and 2 point attempts to the output of calculate_stats(). (#596)
Fixed bug that led to missing pbp related team stats in calculate_stats() because an internal function did not standardize team abbreviations. (#599)
Thank you to @jdpretorius123, @JoeMarino2021, @lancejames35, @naymikm, @rayrosales66, and @TheMathNinja for their questions, feedback, and contributions towards this release.

PSA: The first game of the year is always a wildcard for #nflverse. Please be patient if you try to access play-by-play data. I am fairly confident that our pipeline works but I can’t guarantee.

I wonder how this year's Dolphins stack up historically. It can't have happened very often that 60% of the cap is taken up by dead money, can it? #NFL

Sebastian Carl@mrcaseb.com · last mo.

🏈 2026 NFL Cap Texture 🏈 @overthecap.bsky.social flipped the switch to 53 player rosters and I summarized their cap texture breakdowns. I like this viz because it shows how teams spread their money. The viz is sorted by cap space. For more details and full text see mrcaseb.com/posts/nfl_ca...

A stacked bar chart where the differently colored bars show how much percent of the salary cap each NFL team spends on rookie, low figure, middle, high, and elite figure contracts as well as dead cap and cap space.

What's up, chat! Group chats are rolling out today in the new v1.124 update. This is our first feature built for communities, and there's more to come.

A group chat staffed entirely by the Bluesky team's pets, who are very excited to tell each other that group chats now exist.

Based on all 272 spread lines provided by DKSports, I have computed implied team strengths of all teams (in points above average on neutral field) and plotted them against their average opponent strength (i.e. strength of schedule, adjusted for home field advantage).

NFL team strength vs. schedule strength for the 2026 season, based on DraftKings lookahead spreads. Teams higher on the chart are rated stronger by the betting market, while teams further right are projected to face tougher opponents. The Rams, Bills and Seahawks rate among the strongest teams; the Cardinals and Dolphins face the hardest schedules.

We are close to the 2026 NFL schedule release so let's look at the strength of schedule based on Vegas win totals. (Data from DKSportsbook, FDSportsbook, and BetMGM via RotoWireNFL)

Chart showing the 2026 NFL strength of schedule based on Vegas win totals: the Arizona Cardinals are projected to face the toughest schedule (.547), followed by the Miami Dolphins and Carolina Panthers. The Detroit Lions are projected to have the easiest schedule (.464). Bar chart ranks all 32 NFL teams from easiest to toughest schedule.

It's R release season, which makes it the perfect time to revisit my article on how to perform R upgrades and restore your libraries. #rstats mrcaseb.com/posts/upgrad...

Upgrade R! – mrcaseb

And how you should do it in my opinion.

mrcaseb.com

Peter Dalgaard@pdalgd.bsky.social · 6mo ago

R version 4.6.0 "Because it was There" (source version) has been released. It should be on CRAN by now. #rstats The choice of codename is in remembrance of R Core member Tomàš Kalibera (1978-2026). Among many other things, he was a keen mountain climber.

Final draft pick probabilities of the picks 1-10. Percentages are the vig removed probabilities according to DraftKings that a player will be picked at the corresponding position. Data as of now. Sorted by highest remaining probability per pick.

A table shows 2026 NFL draft prospects along with pick probabilities according to DraftKings Sportsbook for picks 1-10.
Sebastian Carl@mrcaseb.com · 6mo ago

Today's update of market implied odd of draft picks 1-10. Percentages are the vig removed probabilities according to DraftKings that a player will be picked at the corresponding position. Data as of today and subject to change.

Today's update of market implied odd of draft picks 1-10. Percentages are the vig removed probabilities according to DraftKings that a player will be picked at the corresponding position. Data as of today and subject to change.

A table shows 2026 NFL draft prospects along with pick probabilities according to DraftKings Sportsbook for picks 1-10.
Sebastian Carl@mrcaseb.com · 6mo ago

The #NFL draft comes closer so here is what the market thinks who will be drafted at picks 1-10. Percentages are the vig removed probabilities according to DraftKings that a player will be picked at the corresponding position. Data as of today and subject to change.

A table shows 2026 NFL draft prospects along with pick probabilities according to DraftKings Sportsbook for picks 1-10.

The #NFL draft comes closer so here is what the market thinks who will be drafted at picks 1-10. Percentages are the vig removed probabilities according to DraftKings that a player will be picked at the corresponding position. Data as of today and subject to change.

A table shows 2026 NFL draft prospects along with pick probabilities according to DraftKings Sportsbook for picks 1-10.

The #NFL draft comes closer so here is what the market thinks who will be drafted at picks 1-10. Percentages are the vig removed probabilities according to DraftKings that a player will be picked at the corresponding position. Data as of today and subject to change.

A table shows 2026 NFL draft prospects along with pick probabilities according to DraftKings Sportsbook for picks 1-10.

I've added a very nerdy function to the #rstats package nflseedR. Using nfl_regular_season(), you can determine each team's matchups for the following season (including home teams) based on the standings of a completed season. Fully implemented in data.table nflseedr.com/reference/nf...

Compute NFL Regular Season Matchups — nfl_regular_season

Use standings of a completed season to compute all matchups (including location) of the following season based on NFL regular season schedule rules.

nflseedr.com

I have received several requests for nflfastR to add the number of “explosive plays” to the stats. Is there a standardized definition of an explosive run or pass? Something like 10+ rushing yards and 15+ passing yards? Please feel free to add your input here github.com/nflverse/nfl...

Add "Explosives" to the output of `calculate_stats()` · Issue #550 · nflverse/nflfastR

e.g. 10+ rushing yards and 15+ passing yards. Is there a unified definition of explosive plays?

github.com

dplyr 1.2.0 is out now and we are SO excited! - `filter_out()` for dropping rows - `recode_values()`, `replace_values()`, and `replace_when()` that join `case_when()` as a complete family of recoding/replacing tools These are huge quality of life wins for #rstats! tidyverse.org/blog/2026/02...

dplyr 1.2.0

dplyr 1.2.0 fills in some important gaps in dplyr's API: we've added a new complement to `filter()` focused on dropping rows, and we've expanded the `case_when()` family with three new recoding and re...

tidyverse.org