将NA转换为因子级别

时间:2014-11-28 21:12:51

标签: r missing-data

我有一个NA值的向量,我希望用新的因子级别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

这样可行,但这似乎是一种奇怪的方式。

a = as.factor(ifelse(is.na(a), "NA", a))
class(a)
[1] "factor"

这是预期的输出:

a
[1] 1  1  2  2  3  NA
Levels: 1 2 3 NA

3 个答案:

答案 0 :(得分:45)

您可以使用addNA()

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

这基本上是用于exclude = NULL因子分解的便利函数。来自help(factor) -

  

addNA通过将NA转换为额外级别来修改因子(例如,在表格中计算NA个值)。

这很好的另一个原因是,如果您已经有f因素,则可以使用addNA()快速添加NA作为因素级别​​而不更改f 。如文档中所述,这对表格很方便。它也读得很好。

答案 1 :(得分:16)

您可以将NA添加为级别,并使用包 forcats 中的<NA>将级别名称更改为比fct_explicit_na更明确的名称。

library(forcats)

默认情况下,您将新级别设为(Missing)

fct_explicit_na(a)

[1] 1         1         2         2         3         (Missing)
Levels: 1 2 3 (Missing)

您可以将其设置为其他内容:

fct_explicit_na(a, "unknown")

[1] 1       1       2       2       3       unknown
Levels: 1 2 3 unknown

答案 2 :(得分:15)

将exclude参数设置为NULL以包含NAs作为级别(并使用因子而不是as.factor。执行相同的操作并设置更多参数):

a = factor(as.character(c(1, 1, 2, 2, 3, NA)), exclude = NULL)

> a
[1] 1    1    2    2    3    <NA>
Levels: 1 2 3 <NA>