Convert NA into a factor level

missing-data, r

Solution

You can use `addNA()`.

x <- c(1, 1, 2, 2, 3, NA)
addNA(x)
# [1] 1    1    2    2    3    <NA>
# Levels: 1 2 3 <NA>

This is basically a convenience function for factoring with `exclude = NULL`. From `help(factor)` -

`addNA` modifies a factor by turning `NA` into an extra level (so that `NA` values are counted in tables, for instance).

So another reason this is nice is because if you already have a factor `f`, you can use `addNA()` to quickly add `NA` as a factor level without changing `f`. As mentioned in the documentation, this is handy for tables. It also reads nicely.

Problem

I have a vector with `NA` values that I would like to replace by a new factor level `NA`. ``` a = as.factor(as.character(c(1, 1, 2, 2, 3, NA))) a [1] 1 1 2 2 3 <NA> Levels: 1 2 3 ``` This works, but it seems like a strange way to do it. ``` a = as.factor(ifelse(is.na(a), "NA", a)) class(a) [1] "factor" ``` This is the expected output: ``` a [1] 1 1 2 2 3 NA Levels: 1 2 3 NA ```

Original source