This is a generalisation of stats::relevel()
that allows you to move any
number of levels to any location.
fct_relevel(.f, ..., after = 0L)
A factor (or character vector).
Either a function (or formula), or character levels.
A function will be called with the current levels as input, and the return value (which must be a character vector) will be used to relevel the factor.
Any levels not mentioned will be left in their existing order, by default after the explicitly mentioned levels. Supports tidy dots.
Where should the new values be placed?
f <- factor(c("a", "b", "c", "d"), levels = c("b", "c", "d", "a"))
fct_relevel(f)
fct_relevel(f, "a")
fct_relevel(f, "b", "a")
# Move to the third position
fct_relevel(f, "a", after = 2)
# Relevel to the end
fct_relevel(f, "a", after = Inf)
fct_relevel(f, "a", after = 3)
# Relevel with a function
fct_relevel(f, sort)
fct_relevel(f, sample)
fct_relevel(f, rev)
# Using 'Inf' allows you to relevel to the end when the number
# of levels is unknown or variable (e.g. vectorised operations)
df <- forcats::gss_cat[, c("rincome", "denom")]
lapply(df, levels)
df2 <- lapply(df, fct_relevel, "Don't know", after = Inf)
lapply(df2, levels)
# You'll get a warning if the levels don't exist
fct_relevel(f, "e")
Run the code above in your browser using DataLab