Functions to efficiently simulate and evaluate college football seasons: standings with a documented tiebreaker cascade, conference champions, College Football Playoff (CFP) seeding, and week-by-week season simulation with a pluggable results generator.
cfbseedR is adapted from nflseedR (MIT) by Lee Sharpe and Sebastian Carl of the nflverse, and is part of the SportsDataverse.
Data freshness and pipeline status for every SportsDataverse dataset: sportsdataverse.org/status.
Install the released version of cfbseedR from CRAN with:
install.packages("cfbseedR")
Or install the development version from GitHub with:
# install.packages("remotes")
# remotes::install_github("sportsdataverse/cfbseedR")
install.packages("cfbseedR", repos = c('https://sportsdataverse.r-universe.dev', 'https://cloud.r-project.org'))
library(cfbseedR)
# Bundled toy season (9 teams, 2 conferences + 1 independent)
games <- cfb_games_example
teams <- cfb_teams_example
# Standings with conference ranks and champions
standings <- cfb_standings(games, teams, tiebreaker_depth = "POINTS")
# Simulate a season 100 times (blank results are simulated)
games$result[games$week >= 3] <- NA
set.seed(42)
sim <- cfb_simulations(games, teams, simulations = 100, playoff_seeds = 4)
sim$overall
# Pretty gt summary, grouped by conference.
# Needs the optional presentation packages: install.packages(c("gt", "scales"))
summary(sim)
# Spread the simulations across cores
# future::plan("multisession")
# sim <- cfb_simulations(games, teams, simulations = 10000, chunks = 8)
# Real data via cfbfastR (Suggests; the engine itself needs no cfbfastR)
# sched <- cfbfastR::load_cfb_schedules(2024)
# games <- cfb_games_from_schedule(sched)
See the Getting
started
article for a full walkthrough and Simulating
seasons
for custom compute_results functions, the tiebreaker ladder, and
CFP-12 seeding rules.
Following the SportsDataverse convention, the engine’s user-facing
exports are prefixed with cfb_: cfb_standings(),
cfb_playoff_seeds(), cfb_simulations(), and
cfb_games_from_schedule(). Two helpers mirror their nflseedR namesakes
instead: cfbseedR_compute_results() (the default results generator,
after nflseedR_compute_results()) and simulations_verify_fct() (the
custom-generator contract checker).
"FBS Independents" or NA conference)
appear in overall standings but get no conference rank. Supplying a
conf_division column on teams opts a conference into
division-format ranking (division champions take conf_rank 1-2 —
the 2026 Sun Belt, or any historical divisional season).game_type == "CONF_CHAMP")
count toward the overall record and decide the conference champion,
but do not count toward the conference record/rank.cfb_playoff_seeds(), with a
season-keyed autobid policy: "2026" (default) puts the ACC / Big
12 / Big Ten / SEC champions in regardless of ranking, plus the
highest-ranked Group-of-6 team (champion or not) and Notre Dame when
ranked inside the field; "2025" keeps the five-best-champions
rule. The field is seeded strictly by committee rank (rankings).tiebreaker_data — the package computes none of them; absent inputs
skip their rungs deterministically and are recorded in
tiebreak_notes. All cascade quantities the package does compute
are regular-season-conference-scoped, so conference ranks depend
only on conference play.sov/sos in the standings output are conference-scoped
(opponents’ conference records over regular-season conference games;
sov over conference victories, sos over conference opponents);
independents get 0.rankings = NULL, cfb_playoff_seeds() falls back to ordering
teams by win pct, SOV, SOS, and point differential instead of a
committee ranking.rankings are static across simulations.games has no
game_type == "POST" rows; the first round is hosted by the higher
seed, later rounds are neutral-site.simulate_nfl()-style legacy v1 API — the
former is not a CFB concept, the latter would be new-package cruft.The architecture (standings init → conference ranks → seeds; week-loop
simulation with pluggable compute_results; ELO-based default results
generator) is a direct adaptation of
nflseedR (MIT), Copyright (c)
Lee Sharpe and Sebastian Carl. Huge thanks to them and the broader
nflverse team for the original design.
A printable one-page reference covering cfbplotR, cfb4th and cfbseedR — the function families, the loaders, and what each one returns.
📄 Download the cfbseedR cheat sheet (PDF)
Free to download, print and hand out; light and dark, US Letter landscape. Every SportsDataverse package has one — browse them all at sportsdataverse.org/cheatsheets.
To cite the cfbseedR R
package in publications, use:
BibTeX Citation
@misc{gilani_cfbseedR,
author = {Saiem Gilani and Sebastian Carl and Lee Sharpe},
title = {cfbseedR: The SportsDataverse's R Package to Simulate and Evaluate College Football Seasons.},
url = {https://cfbseedR.sportsdataverse.org/},
year = {2026}
}
If you use the season-simulation methodology, please also cite nflseedR by Sebastian Carl and Lee Sharpe.
cfbseedR is part of the SportsDataverse.
Related packages:
cfb_games_from_schedule())