Aggregation and summarizing

1. Grouped summaries with summarise()

Collapse many values down to a single summary (summarise()).

summarise(flights, delay = mean(dep_delay, na.rm = TRUE))

With summarise() one can use aggregate functions. When you group by multiple variables, each summary peels off one level of the grouping. That makes it easy to progressively roll up a dataset:

daily <- group_by(flights, year, month, day)
(per_day   <- summarise(daily, flights = n()))
(per_month <- summarise(per_day, flights = sum(flights)))
(per_year  <- summarise(per_month, flights = sum(flights)))

If you need to remove grouping, and return to operations on ungrouped data, use ungroup():

daily %>%
  ungroup() %>%             # no longer grouped
  summarise(flights = n())

2. Example from the project

Task: filtering participants whose average error on the validation stimuli was more than 0.2

# check the validation stimuli and delete those participants whose average error exceeds 0.2
validation_stimuli <- results %>% filter(isValidation == 1) %>% group_by(Participant) %>% summarise(mean = mean(Error))
validation_stimuli_passed <- filter(validation_stimuli, mean < 0.2)
filtered_res <- results %>% filter(isValidation == 0) %>% inner_join(validation_stimuli_passed, by="Participant")