9.8 Make a Schedule
make_schedule <- function(teams, k) {
# INPUTS:
## teams: vector of team names
## k: number of games played between two teams in the first team’s home park
# OUTPUT: tibble with baseball season schedule
num_teams <- length(teams)
Home <- rep(rep(teams, each = num_teams), k)
Visitor <- rep(rep(teams, num_teams), k)
tibble(Home = Home, Visitor = Visitor) |>
filter(Home != Visitor)
}
to construct the schedule for the 1968 season
teams_68 <- Lahman::Teams |>
filter(yearID == 1968) |>
select(teamID, lgID) |>
mutate(teamID = as.character(teamID)) |>
group_by(lgID)
schedule <- teams_68 |>
group_split() |>
set_names(pull(group_keys(teams_68), "lgID")) |>
map(~make_schedule(teams = .x$teamID, k = 9)) |>
list_rbind(names_to = "lgID")
“Note that schedule has \(\frac{162 \cdot 20}{2}\) rows [permutations], since each game involves two teams.”. For example, we simulate the 1968 Detroit Tigers’ schedule as
Detroit Tigers 1968 Schedule | |||
via simple construction | |||
game_num | lgID | Home | Visitor |
---|---|---|---|
1 | AL | BAL | DET |
2 | AL | BOS | DET |
3 | AL | CAL | DET |
4 | AL | CHA | DET |
5 | AL | CLE | DET |
6 | AL | DET | BAL |
7 | AL | DET | BOS |
8 | AL | DET | CAL |
9 | AL | DET | CHA |
10 | AL | DET | CLE |
11 | AL | DET | MIN |
12 | AL | DET | NYA |
13 | AL | DET | OAK |
14 | AL | DET | WS2 |
15 | AL | MIN | DET |
16 | AL | NYA | DET |
17 | AL | OAK | DET |
18 | AL | WS2 | DET |
19 | AL | BAL | DET |
20 | AL | BOS | DET |
21 | AL | CAL | DET |
22 | AL | CHA | DET |
23 | AL | CLE | DET |
24 | AL | DET | BAL |
25 | AL | DET | BOS |
26 | AL | DET | CAL |
27 | AL | DET | CHA |
28 | AL | DET | CLE |
29 | AL | DET | MIN |
30 | AL | DET | NYA |
31 | AL | DET | OAK |
32 | AL | DET | WS2 |
33 | AL | MIN | DET |
34 | AL | NYA | DET |
35 | AL | OAK | DET |
36 | AL | WS2 | DET |
37 | AL | BAL | DET |
38 | AL | BOS | DET |
39 | AL | CAL | DET |
40 | AL | CHA | DET |
41 | AL | CLE | DET |
42 | AL | DET | BAL |
43 | AL | DET | BOS |
44 | AL | DET | CAL |
45 | AL | DET | CHA |
46 | AL | DET | CLE |
47 | AL | DET | MIN |
48 | AL | DET | NYA |
49 | AL | DET | OAK |
50 | AL | DET | WS2 |
51 | AL | MIN | DET |
52 | AL | NYA | DET |
53 | AL | OAK | DET |
54 | AL | WS2 | DET |
55 | AL | BAL | DET |
56 | AL | BOS | DET |
57 | AL | CAL | DET |
58 | AL | CHA | DET |
59 | AL | CLE | DET |
60 | AL | DET | BAL |
61 | AL | DET | BOS |
62 | AL | DET | CAL |
63 | AL | DET | CHA |
64 | AL | DET | CLE |
65 | AL | DET | MIN |
66 | AL | DET | NYA |
67 | AL | DET | OAK |
68 | AL | DET | WS2 |
69 | AL | MIN | DET |
70 | AL | NYA | DET |
71 | AL | OAK | DET |
72 | AL | WS2 | DET |
73 | AL | BAL | DET |
74 | AL | BOS | DET |
75 | AL | CAL | DET |
76 | AL | CHA | DET |
77 | AL | CLE | DET |
78 | AL | DET | BAL |
79 | AL | DET | BOS |
80 | AL | DET | CAL |
81 | AL | DET | CHA |
82 | AL | DET | CLE |
83 | AL | DET | MIN |
84 | AL | DET | NYA |
85 | AL | DET | OAK |
86 | AL | DET | WS2 |
87 | AL | MIN | DET |
88 | AL | NYA | DET |
89 | AL | OAK | DET |
90 | AL | WS2 | DET |
91 | AL | BAL | DET |
92 | AL | BOS | DET |
93 | AL | CAL | DET |
94 | AL | CHA | DET |
95 | AL | CLE | DET |
96 | AL | DET | BAL |
97 | AL | DET | BOS |
98 | AL | DET | CAL |
99 | AL | DET | CHA |
100 | AL | DET | CLE |
101 | AL | DET | MIN |
102 | AL | DET | NYA |
103 | AL | DET | OAK |
104 | AL | DET | WS2 |
105 | AL | MIN | DET |
106 | AL | NYA | DET |
107 | AL | OAK | DET |
108 | AL | WS2 | DET |
109 | AL | BAL | DET |
110 | AL | BOS | DET |
111 | AL | CAL | DET |
112 | AL | CHA | DET |
113 | AL | CLE | DET |
114 | AL | DET | BAL |
115 | AL | DET | BOS |
116 | AL | DET | CAL |
117 | AL | DET | CHA |
118 | AL | DET | CLE |
119 | AL | DET | MIN |
120 | AL | DET | NYA |
121 | AL | DET | OAK |
122 | AL | DET | WS2 |
123 | AL | MIN | DET |
124 | AL | NYA | DET |
125 | AL | OAK | DET |
126 | AL | WS2 | DET |
127 | AL | BAL | DET |
128 | AL | BOS | DET |
129 | AL | CAL | DET |
130 | AL | CHA | DET |
131 | AL | CLE | DET |
132 | AL | DET | BAL |
133 | AL | DET | BOS |
134 | AL | DET | CAL |
135 | AL | DET | CHA |
136 | AL | DET | CLE |
137 | AL | DET | MIN |
138 | AL | DET | NYA |
139 | AL | DET | OAK |
140 | AL | DET | WS2 |
141 | AL | MIN | DET |
142 | AL | NYA | DET |
143 | AL | OAK | DET |
144 | AL | WS2 | DET |
145 | AL | BAL | DET |
146 | AL | BOS | DET |
147 | AL | CAL | DET |
148 | AL | CHA | DET |
149 | AL | CLE | DET |
150 | AL | DET | BAL |
151 | AL | DET | BOS |
152 | AL | DET | CAL |
153 | AL | DET | CHA |
154 | AL | DET | CLE |
155 | AL | DET | MIN |
156 | AL | DET | NYA |
157 | AL | DET | OAK |
158 | AL | DET | WS2 |
159 | AL | MIN | DET |
160 | AL | NYA | DET |
161 | AL | OAK | DET |
162 | AL | WS2 | DET |
table code
schedule |>
filter(Home == "DET" | Visitor == "DET") |>
mutate(game_num = 1:162, .before = lgID) |>
gt() |>
cols_align(align = "center") |>
tab_header(title = "Detroit Tigers 1968 Schedule",
subtitle = "via simple construction") |>
tab_style(
locations = cells_body(columns = Home, rows = Home == "DET" ),
style = list(cell_fill(color = "#FA4616"), cell_text(color = "#0C2340"))) |>
tab_style(
locations = cells_body(columns = Visitor, rows = Visitor == "DET" ),
style = list(cell_fill(color = "#FA4616"), cell_text(color = "#0C2340"))) |>
tab_style(
locations = cells_body(columns = Home, rows = Home != "DET" ),
style = list(cell_fill(color = "#0C2340"), cell_text(color = "#FA4616"))) |>
tab_style(
locations = cells_body(columns = Visitor, rows = Visitor != "DET" ),
style = list(cell_fill(color = "#0C2340"), cell_text(color = "#FA4616")))