Skip to contents

Implements 12-team CFP straight seeding with a season-keyed automatic-qualifier policy:

  • autobid = "2026" (default, current rule): the ACC, Big 12, Big Ten and SEC champions are in regardless of ranking; the highest-ranked team from the Group of 6 (American, Conference USA, MAC, Mountain West, Pac-12, Sun Belt) is in whether or not it won its conference; and Notre Dame is in if ranked inside the top playoff_seeds.

  • autobid = "2025": the 5 highest-ranked conference champions are guaranteed inclusion (the 2024-2025 rule).

Under both policies seeds are assigned strictly in ranking order (champions are not bumped up; straight seeding, 2025+).

Usage

cfb_playoff_seeds(
  standings,
  rankings = NULL,
  playoff_seeds = 12L,
  autobid = c("2026", "2025")
)

Arguments

standings

A standings table as returned by cfb_standings() (requires at least team, conference, conf_champ, win_pct, sov, sos, pd, and a sim or season id column).

rankings

Optional data frame with columns team and rank (1 = best), e.g. the CFP committee rankings. Teams missing from rankings are treated as unranked and ordered behind all ranked teams. When NULL, 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).

autobid

Automatic-qualifier policy, "2026" (default) or "2025" - see Description.

Value

The standings input (all its columns unchanged; see cfb_standings() for the column table) with one column added:

ColumnTypeDescription
seedintegerCFP seed in straight-seeding order; NA for teams outside the playoff field.

Details

Under autobid = "2025", if there are fewer than 5 conference champions all champions are guaranteed (capped at playoff_seeds). Under either policy a guaranteed team ranked outside the top playoff_seeds displaces the lowest-ranked at-large team and is seeded by its rank order within the field. Conference names are matched against both cfbd and short spellings (e.g. "American Athletic" / "American").

See also

Examples

# \donttest{
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

# }