Using the pivot_wider() function
With
tidyr 1.0.0, there are several enhancements, one of which are pivot_wider() and pivot_longer().
Using pivot_wider()
In another
post, the spread() function was introduced as a way to observe the “tidy” principle of data formatting for analysis.
The pivot_wider() function is an updated of spread() and is much more intuitive. Here’s how it works:
# PIVOT_WIDER - even better than Spread
data %>%
filter(GeoAreaName=="Morocco" | GeoAreaName=="Qatar") %>%
select(GeoAreaName, TimePeriod, Sex, `Type of skill`, Value) %>%
group_by(GeoAreaName, TimePeriod, Sex, `Type of skill`, Value) %>%
pivot_wider(names_from = `Type of skill`, values_from = Value)
In this data set, Type of skill represents, broadly speaking, ICT Skills broken down into eight categories in this column. By using pivot_wider() each sub-category of ICT Skills gets it’s own column, thus making the overall data frame wider.
Using pivot_longer()
Conversely, there’s also pivot_longer for the opposite effect. This next code chunk is part of my attempt for
TidyTuesday (‘Extinct Plants’ for the week of 2020-08-18)
The cols parameter determines the range of columns to be changed from wide to long. The names_to parameter sets the new column name and values_to indicates the value of the new columns.
# PIVOT_LONGER - better than Gather
plants %>%
select(binomial_name, threat_AA:action_NA) %>%
pivot_longer(cols = threat_AA:action_NA, names_to = "action", values_to = "count") %>%
ggplot(aes(x = binomial_name, y = action, fill = count)) +
geom_tile() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))