you would use tidyr::pivot_longer() to achieve this.
however, I can't demo on your data, as you haven't shared it in a forum friendly way.
If you would like that additional support please see this guide, to see how to create one:
If you want the odds in numeric format instead of character, then delete the + signs in the file you import. It is OK to have - signs in front of negative numbers.
The –Team in pivot_longer is to select all of the columns except Team to pivot. The names of those columns become entries in the new Type column and values in those columns are in the new Odds column.
library(tidyverse)
data <- structure(list(Team = c("Detroit Lions", "Las Vegas Raiders",
"Tampa Bay Buccaneers", "San Francisco 49ers", "Cincinnati Bengals"
), ca = c("+20000", "+8000", "+650", "+1400", "+12500"), ub = c("+20000",
"+9000", "+650", "+1400", "+15000"), bo = c("+25000", "+8000",
"+700", "+1400", "+15000")), row.names = 2:6, class = "data.frame")
pivot_longer(data, -Team, names_to = "Type", values_to = "Odds")
#> # A tibble: 15 × 3
#> Team Type Odds
#> <chr> <chr> <chr>
#> 1 Detroit Lions ca +20000
#> 2 Detroit Lions ub +20000
#> 3 Detroit Lions bo +25000
#> 4 Las Vegas Raiders ca +8000
#> 5 Las Vegas Raiders ub +9000
#> 6 Las Vegas Raiders bo +8000
#> 7 Tampa Bay Buccaneers ca +650
#> 8 Tampa Bay Buccaneers ub +650
#> 9 Tampa Bay Buccaneers bo +700
#> 10 San Francisco 49ers ca +1400
#> 11 San Francisco 49ers ub +1400
#> 12 San Francisco 49ers bo +1400
#> 13 Cincinnati Bengals ca +12500
#> 14 Cincinnati Bengals ub +15000
#> 15 Cincinnati Bengals bo +15000