Collapse factor levels into missing levels

136 Views Asked by At

I would like to have "Dont know" and "Refuse" as missing, but assigning it to NULL does not seem to do the trick.

library(tidyverse)

mydata <- tibble(
  a = factor(c("Yes", "No", "Dont know", "Yes",  "Refuse", "No",
               "Dont know", "Yes", "No", "Dont know", "Refuse"))
)

mydata %>% 
  mutate(a = fct_collapse(a, NULL = c("Dont know", "Refuse"))) %>%
  count(a)

# # A tibble: 3 × 2
#   a         n
#   <fct> <int>
# 1 NULL      5
# 2 No        3
# 3 Yes       3
1

There are 1 best solutions below

3
Darren Tsai On BEST ANSWER

Since forcats v1.0.0, you should use fct_na_level_to_value:

mydata %>% 
  mutate(a = fct_na_level_to_value(a, extra_levels = c("Dont know", "Refuse"))) %>%
  count(a)

# # A tibble: 3 × 2
#   a         n
#   <fct> <int>
# 1 No        3
# 2 Yes       3
# 3 NA        5