## ----setup, include = FALSE--------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----message = FALSE---------------------------------------------------------- library(dplyr) library(ggplot2) library(forcats) ## ----initial-plot------------------------------------------------------------- ggplot(starwars, aes(y = hair_color)) + geom_bar() ## ----fct-infreq-hair---------------------------------------------------------- ggplot(starwars, aes(y = fct_infreq(hair_color))) + geom_bar() ## ----------------------------------------------------------------------------- f <- factor(c("x", "y", NA)) levels(f) is.na(f) ## ----------------------------------------------------------------------------- f <- factor(c("x", "y", NA), exclude = NULL) levels(f) is.na(f) ## ----------------------------------------------------------------------------- ggplot(starwars, aes(y = fct_infreq(fct_na_value_to_level(hair_color)))) + geom_bar() + labs(y = "Hair color") ## ----------------------------------------------------------------------------- starwars |> count(skin_color, sort = TRUE) ## ----------------------------------------------------------------------------- starwars |> mutate(skin_color = fct_lump(skin_color, n = 5)) |> count(skin_color, sort = TRUE) ## ----------------------------------------------------------------------------- starwars |> mutate(skin_color = fct_lump(skin_color, prop = .1)) |> count(skin_color, sort = TRUE) ## ----------------------------------------------------------------------------- starwars |> mutate(skin_color = fct_lump(skin_color, prop = .1, other_level = "extra")) |> count(skin_color, sort = TRUE) ## ----fct-lump-mean------------------------------------------------------------ avg_mass_eye_color <- starwars |> mutate(eye_color = fct_lump(eye_color, n = 6)) |> group_by(eye_color) |> summarise(mean_mass = mean(mass, na.rm = TRUE)) avg_mass_eye_color ## ----fct-reorder-------------------------------------------------------------- avg_mass_eye_color |> mutate(eye_color = fct_reorder(eye_color, mean_mass)) |> ggplot(aes(x = eye_color, y = mean_mass)) + geom_col() ## ----------------------------------------------------------------------------- gss_cat |> count(rincome) ## ----------------------------------------------------------------------------- levels(gss_cat$rincome) ## ----------------------------------------------------------------------------- reshuffled_income <- gss_cat$rincome |> fct_shuffle() levels(reshuffled_income) ## ----------------------------------------------------------------------------- fct_relevel(reshuffled_income, c("Lt $1000", "$1000 to 2999")) |> levels() ## ----------------------------------------------------------------------------- fct_relevel(reshuffled_income, c("Lt $1000", "$1000 to 2999"), after = 1) |> levels()