我有一个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
答案 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>