Implements 12-team CFP straight seeding (2025 rule): the field is the
playoff_seeds best-ranked teams with the 5 highest-ranked conference
champions guaranteed inclusion, and seeds are assigned strictly in ranking
order (champions are not bumped up).
Arguments
- standings
A standings table as returned by
cfb_standings()(requires at leastteam,conference,conf_champ,win_pct,sov,sos,pd, and asimorseasonid column).- rankings
Optional data frame with columns
teamandrank(1 = best), e.g. the CFP committee rankings. Teams missing fromrankingsare treated as unranked and ordered behind all ranked teams. WhenNULL, a documented fallback ordering is used instead: teams are ordered by win percentage, then strength of victory, strength of schedule, point differential, and team name.- playoff_seeds
Number of playoff spots (default 12).
Value
The standings input (all its columns unchanged; see
cfb_standings() for the column table) with one column added:
| Column | Type | Description |
seed | integer | CFP seed in straight-seeding order; NA for teams outside the playoff field. |
Details
If there are fewer than 5 conference champions, all champions are
guaranteed (capped at playoff_seeds). A guaranteed champion ranked
outside the top playoff_seeds displaces the lowest-ranked at-large team
and is seeded by its rank order within the field (i.e. it takes the last
seed).
See also
cfb_standings(), cfb_simulations(),
the nflseedR original: https://nflseedr.com
Examples
games <- read.csv(system.file("extdata", "toy_games.csv", package = "cfbseedR"))
teams <- read.csv(system.file("extdata", "toy_teams.csv", package = "cfbseedR"))
standings <- cfb_standings(games, teams, tiebreaker_depth = "POINTS",
verbosity = "NONE")
rankings <- data.frame(team = c("B1", "I1", "A1", "A3"), rank = 1:4)
seeded <- cfb_playoff_seeds(standings, rankings = rankings, playoff_seeds = 4)
seeded[!is.na(seeded$seed), c("team", "seed")]
#> # A tibble: 4 × 2
#> team seed
#> <chr> <int>
#> 1 A1 3
#> 2 A3 4
#> 3 B1 1
#> 4 I1 2