我有一个带有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
Run Code Online (Sandbox Code Playgroud)
这有效,但这似乎是一种奇怪的方式.
a = as.factor(ifelse(is.na(a), "NA", a))
class(a)
[1] "factor"
Run Code Online (Sandbox Code Playgroud)
这是预期的输出:
a
[1] 1 1 2 2 3 NA
Levels: 1 2 3 NA
Run Code Online (Sandbox Code Playgroud)
Ric*_*ven 50
你也可以使用addNA().
x <- c(1, 1, 2, 2, 3, NA)
addNA(x)
# [1] 1 1 2 2 3 <NA>
# Levels: 1 2 3 <NA>
Run Code Online (Sandbox Code Playgroud)
这基本上是用于分解的便利功能exclude = NULL.来自help(factor)-
addNA通过转换NA为额外级别来修改因子(NA例如,在表中计算值).
所以另一个原因很好,因为如果你已经有一个因素f,你可以使用addNA()快速添加NA作为因子水平而不改变f.如文档中所述,这对表格很方便.它也读得很好.
Lyz*_*deR 17
将exclude参数设置为NULL以包含NAs作为级别(并使用factor而不是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>
Run Code Online (Sandbox Code Playgroud)
aos*_*ith 16
您可以将NA添加为级别,并将级别名称更改为比<NA>使用fct_explicit_napackage forcats更明确的名称.
library(forcats)
Run Code Online (Sandbox Code Playgroud)
默认情况下,您将获得以下新级别(Missing):
fct_explicit_na(a)
[1] 1 1 2 2 3 (Missing)
Levels: 1 2 3 (Missing)
Run Code Online (Sandbox Code Playgroud)
您可以将其设置为其他内容:
fct_explicit_na(a, "unknown")
[1] 1 1 2 2 3 unknown
Levels: 1 2 3 unknown
Run Code Online (Sandbox Code Playgroud)