Factors

Factors represent categorical data with a fixed set of levels.

Factors represent categorical data with a fixed set of levels.

⚠️ Converting numeric-looking factors: as.numeric(as.character(f)) — not as.numeric(f) (which gives codes).

forcats (tidyverse) makes factor work easier:

sizes <- factor(c("small", "large", "medium", "small"),
                levels = c("small", "medium", "large"))
levels(sizes); nlevels(sizes); table(sizes)
as.integer(sizes)        # underlying codes: 1 3 2 1
summary(sizes)

# Ordered factors
grade <- factor(c("B", "A", "C"), levels = c("C", "B", "A"), ordered = TRUE)
grade > "B"              # FALSE TRUE FALSE

# Common operations
droplevels(sizes[sizes != "large"])
relevel(sizes, ref = "medium")
factor(sizes, labels = c("S", "M", "L"))
cut(c(1, 5, 12, 25), breaks = c(0, 10, 20, 30), labels = c("low", "mid", "high"))
interaction(c("a", "b"), c("x", "y"))
library(forcats)
fct_infreq(f)           # order by frequency
fct_reorder(f, x)       # order by another variable (great for plots)
fct_lump_n(f, 5)        # keep top 5, lump the rest into "Other"
fct_recode(f, Small = "small")
fct_collapse(f, big = c("large", "huge"))
fct_rev(f); fct_relevel(f, "medium")