DATA 101 — Homework 3: Data Wrangling

Author

Zixuan Li

Instructions

You will be working on the olympic_gymnasts dataset from TidyTuesday. Please DO NOT change the setup code below:

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
    )
  )

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.