olympics <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-07-27/olympics.csv')
olympic_gymnasts <- olympics |>
filter(!is.na(age)) |> # only keep athletes with known age
filter(sport == "Gymnastics") |> # keep only gymnasts
mutate(
medalist = case_when( # add column for success in medaling
is.na(medal) ~ FALSE, # NA values go to FALSE
!is.na(medal) ~ TRUE # non-NA values (Gold, Silver, Bronze) go to TRUE
)
)DATA 101 — Homework 3: Data Wrangling
Instructions
You will be working on the olympic_gymnasts dataset from TidyTuesday. Please DO NOT change the setup code below:
More information about the dataset can be found at:
https://github.com/rfordatascience/tidytuesday/blob/master/data/2021/2021-07-27/readme.md
Question 1: Create a subset dataset with the following columns only: name, sex, age, team, year, and medalist. Call this new dataset df.
df <- olympic_gymnasts |>
select(name, sex, age, team, year, medalist)Question 2: From df, create df2 that only contains gymnasts from the years 2008, 2012, and 2016.
df2 <- df |>
filter(year %in% c(2008, 2012, 2016))Question 3: Group df2 by year (2008, 2012, and 2016) and summarize the mean of the age in each group.
df2 |>
group_by(year) |>
summarize(mean_age = mean(age))# A tibble: 3 × 2
year mean_age
<dbl> <dbl>
1 2008 21.6
2 2012 21.9
3 2016 22.2
Question 4: Using the full olympic_gymnasts dataset, group by year and find the mean of the age for each year. Call this dataset oly_year.
(Optional: After creating the dataset, find the minimum average age and the year it occurred).
oly_year <- olympic_gymnasts |>
group_by(year) |>
summarize(mean_age = mean(age))
oly_year# A tibble: 29 × 2
year mean_age
<dbl> <dbl>
1 1896 24.3
2 1900 22.2
3 1904 25.1
4 1906 24.7
5 1908 23.2
6 1912 24.2
7 1920 26.7
8 1924 27.6
9 1928 25.6
10 1932 23.9
# ℹ 19 more rows
# Optional: year with the minimum average age
oly_year |>
arrange(mean_age) |>
slice(1)# A tibble: 1 × 2
year mean_age
<dbl> <dbl>
1 1988 19.9
Question 5 (Open-ended): Create a question that requires you to use at least two dplyr verbs (e.g., filter, select, mutate, group_by, summarize, arrange). Write the code that answers your question, and below the chunk, write a brief reflection on your question choice and findings.
Example question: Do gymnasts aged 20 or younger win more medals compared to older gymnasts?
## Question: Which teams had the most medal-winning gymnasts in 2016?
olympic_gymnasts |>
filter(year == 2016, medalist == TRUE) |>
group_by(team) |>
summarize(medal_winners = n()) |>
arrange(desc(medal_winners))# A tibble: 12 × 2
team medal_winners
<chr> <int>
1 Russia 16
2 United States 16
3 China 10
4 Japan 7
5 Great Britain 6
6 Brazil 3
7 Germany 2
8 Ukraine 2
9 Greece 1
10 Netherlands 1
11 North Korea 1
12 Switzerland 1
Reflection & Discussion:
I chose this question because I wanted to compare how successful different teams were in the 2016 Olympics. I used filter() to keep only medalists from 2016, then group_by() and summarize() to count them by team. Finally, I used arrange() to put the teams with the most medal-winning gymnasts at the top. This made it easy to see which teams had the strongest medal results in gymnastics that year.