The base function as.factor() is not a generic, but this variant
is. Methods are provided for factors, character vectors, labelled
vectors, and data frames. By default, when applied to a data frame,
it only affects labelled columns.
Object to coerce to a factor.
Other arguments passed down to method.
Only apply to labelled columns?
How to create the levels of the generated factor:
"default": uses labels where available, otherwise the values. Labels are sorted by value.
"both": like "default", but pastes together the level and value
"label": use only the labels; unlabelled values become NA
"values: use only the values
If TRUE create an ordered (ordinal) factor, if
FALSE (the default) create a regular (nominal) factor.
Includes methods for both class haven_labelled and labelled
for backward compatibility.
x <- labelled(sample(5, 10, replace = TRUE), c(Bad = 1, Good = 5))
# Default method uses values where available
as_factor(x)
#> [1] 4 Bad 4 Bad 4 Good 2 Good Good 2
#> Levels: Bad 2 4 Good
# You can also extract just the labels
as_factor(x, levels = "labels")
#> [1] <NA> Bad <NA> Bad <NA> Good <NA> Good Good <NA>
#> Levels: Bad Good
# Or just the values
as_factor(x, levels = "values")
#> [1] 4 1 4 1 4 5 2 5 5 2
#> Levels: 1 2 4 5
# Or combine value and label
as_factor(x, levels = "both")
#> [1] 4 [1] Bad 4 [1] Bad 4 [5] Good 2 [5] Good
#> [9] [5] Good 2
#> Levels: [1] Bad 2 4 [5] Good
# as_factor() will preserve SPSS missing values from values and ranges
y <- labelled_spss(1:10, na_values = c(2, 4), na_range = c(8, 10))
as_factor(y)
#> [1] 1 2 3 4 5 6 7 8 9 10
#> Levels: 1 2 3 4 5 6 7 8 9 10
# use zap_missing() first to convert to NAs
zap_missing(y)
#> [1] 1 NA 3 NA 5 6 7 NA NA NA
#> attr(,"class")
#> [1] "haven_labelled"
as_factor(zap_missing(y))
#> [1] 1 <NA> 3 <NA> 5 6 7 <NA> <NA> <NA>
#> Levels: 1 3 5 6 7