Download PDF

Translations (PDF)

The **forcats** package provides tools for working with factors, which are R’s data structure for categorical data.

R represents categorical data with factors. A **factor** is an integer vector with a **levels** attribute that stores a set of mappings between integers and categorical values. When you view a factor, R displays not the integers but the levels associated with them.

For example, R will display `c("a", "c", "b", "a")`

with levels `c("a", "b", "c")`

but will store `c(1, 3, 2, 1)`

where 1 = a, 2 = b, and 3 = c.

R will display:

```
[1] a c b a
Levels: a b c
```

R will store:

```
[1] 1 3 2 1
attr(,"levels")
[1] "a" "b" "c"
```

Create a factor with `factor()`

:

`factor(x = character(), levels, labels = levels, exclude = NA, ordered = is.ordered(x), nmax = NA)`

: Convert a vector to a factor. Also`as_factor()`

.

Return its levels with `levels()`

:

`levels(x)`

: Return/set the levels of a factor.

Use `unclass()`

to see its structure.

`fct_count(f, sort = FALSE, prop = FALSE)`

: Count the number of values with each level.`fct_match(f, lvls)`

: Check for`lvls`

in`f`

.`fct_unique(f)`

: Return the unique values, removing duplicates.

`fct_c(...)`

: Combine factors with different levels. Also`fct_cross()`

.`fct_unify(fs, levels = lvls_union(fs))`

: Standardize levels across a list of factors.

`fct_relevel(.f, ..., after = 0L)`

: Manually reorder factor levels.`fct_infreq(f, ordered = NA)`

: Reorder levels by the frequency in which they appear in the data (highest frequency first). Also`fct_inseq()`

.`fct_inorder(f, ordered = NA)`

: Reorder levels by order in which they appear in the data.`fct_rev(f)`

: Reverse level order.`fct_shift(f)`

: Shift levels to left or right, wrapping around end.`fct_shuffle(f, n = 1L)`

: Randomly permute order of factor levels.`fct_reorder(.f, .x, .fun = median, ..., .desc = FALSE)`

: Reorder levels by their relationship with another variable.`fct_reorder2(.f, .x, .y, .fun = last2, ..., .desc = TRUE)`

: Reorder levels by their final values when plotted with two other variables.

`fct_recode(.f, ...)`

: Manually change levels. Also`fct_relabel()`

which obeys`purrr::map`

syntax to apply a function or expression to each level.`fct_anon(f, prefix = "")`

: Anonymize levels with random integers.`fct_collapse(.f, …, other_level = NULL)`

: Collapse levels into manually defined groups.`fct_lump_min(f, min, w = NULL, other_level = "Other")`

: Lumps together factors that appear fewer than`min`

times. Also`fct_lump_n()`

,`fct_lump_prop()`

, and`fct_lump_lowfreq()`

.`fct_other(f, keep, drop, other_level = "Other")`

: Replace levels with “other.”

`fct_drop(f, only)`

: Drop unused levels.`fct_expand(f, ...)`

: Add levels to a factor.`fct_na_value_to_level(f, level = "(Missing)")`

: Assigns a level to NAs to ensure they appear in plots, etc.

CC BY SA Posit Software, PBC • info@posit.co • posit.co

Learn more at forcats.tidyverse.org.

Updated: 2023-06.