Codecademy Logo

Learn R: Aggregates

group_by() with mutate()

Combining dplyr‘s group_by() and mutate() functions allows for the creation of new variables that involve per-group metrics in their calculation.

Grouping a data frame by a selection of columns followed by a call to mutate() allows for the creation of new columns based on per-group summary functions.

Given a students data frame, to add a new column containing the difference between a student’s score and the mean math_score for each student’s respective age group:

students %>%
group_by(age) %>%
mutate(diff_from_age_mean = math_score - mean(math_score, na.rm = TRUE))
  • group_by() groups the data frame by age
  • mutate() will add a new column diff_from_age_mean which is calculated as the difference between a row’s individual math_score and the mean(math_score) for that row’s age-group

dplyr group_by()

dplyr‘s group_by() function can group together rows of a data frame with the same value(s) in either a specified column or multiple columns, allowing for the application of summary functions on the individual groups.

group_by() changes the unit of analysis from a complete dataset to individual groups.

For example, consider a data frame countries. To find the mean and standard deviation of the population column grouped by continent:

countries %>%
group_by(continent) %>%
summarise(mean_pop = mean(population, na.rm = TRUE),
sd_pop = sd(population, na.rm = TRUE))

To find the mean math_score and reading_score by age and gender from a students data frame:

students %>%
group_by(age, gender) %>%
summarise(mean_math_score = mean(math_score, na.rm = TRUE),
mean_reading_score = mean(reading_score, na.rm = TRUE))

filter() with group_by()

Combining dplyr‘s group_by() and filter() functions allows for the filtering of rows of a data frame based on per-group metrics.

Grouping a data frame by a selection of columns followed by a call to filter() allows for filtering a data frame based on per-group summary functions.

Given a students data frame, to keep all the rows of students whose per-age average math_score is less than 80:

students %>%
group_by(age) %>%
filter(mean(math_score, na.rm = TRUE) > 80)
  • group_by() groups the data frame by age
  • filter() will keep all the rows of the data frame whose per-group (per-age) average math_score is greater than 80

dplyr summarise()

dplyr‘s summarise() function can collapse a data frame to a single row, summarising the specified columns by applying a summary function.

Summary functions, or functions that take a vector of values and return a single value, include: mean(), median(), sd() (standard deviation), var() (variance), min(), max(), IQR() (interquartile range), n_distinct() (number of unique values), and sum().

For example, to find the mean population and gdp from countries data frame:

countries %>%
summarise(mean_pop = mean(population, na.rm = TRUE))

To find the mean and standard deviation of both the population and gdp columns from a countries data frame:

countries %>%
summarise(mean_pop = mean(population, na.rm = TRUE),
sd_pop = sd(population, na.rm = TRUE),
mean_gdp = mean(gdp, na.rm = TRUE),
sd_gdp = sd(gdp, na.rm = TRUE))

dplyr package

The dplyr package provides functions that perform data manipulation operations oriented to explore and manipulate datasets. At the most basic level, the package functions refers to data manipulation “verbs” such as select, filter, mutate, arrange, summarize among others that allow to chain multiple steps in a few lines of code. The dplyr package is suitable to work with a single dataset as well as to achieve complex results in large datasets.

Learn More on Codecademy