R如何将其中一个级别更改为NA

lol*_*ity 15 r r-factor

我有一个数据集,其中一个列有因子级别"a" "b" "c" "NotPerformed".如何将所有"NotPerformed"因素更改为NA?

Mat*_*erg 14

将级别设置为NA:

x <- factor(c("a", "b", "c", "NotPerformed"))
x
## [1] a            b            c            NotPerformed
## Levels: a b c NotPerformed
levels(x)[levels(x)=='NotPerformed'] <- NA
x
## [1] a    b    c    <NA>
## Levels: a b c
Run Code Online (Sandbox Code Playgroud)

请注意,系数级别已删除.

  • 顺便说一句,虽然 `x[x=="NotPerformed"] &lt;- NA` 会将值替换为 `NA`,但它不会删除 `'NotPerformed'` 因子级别。这就是为什么这种方法更可取。 (2认同)

jaz*_*rro 8

我修改了我的旧答案并提供了截至 2016 年 9 月您可以做的事情。随着dplyr软件包的开发,现在您可以使用它recode_factor()来完成这项工作。

x <- factor(c("a", "b", "c", "NotPerformed"))

# [1] a            b            c            NotPerformed
# Levels: a b c NotPerformed

library(dplyr)
recode_factor(x, NotPerformed = NA_character_)
# [1] a    b    c    <NA>
# Levels: a b c
Run Code Online (Sandbox Code Playgroud)

  • 这可以更新为包含 `forcats` 包:`fct_recode(x, NULL = "NotPerformed")`。 (6认同)

JWi*_*man 7

或者简单地使用内置exclude选项,无论初始变量是字符还是因子,该选项都有效。

x <- c("a", "b", "c", "NotPerformed")

factor(x, exclude = "NotPerformed")
[1] a    b    c    <NA>
Levels: a b c

factor(factor(x), exclude = "NotPerformed")
[1] a    b    c    <NA>
Levels: a b c
Run Code Online (Sandbox Code Playgroud)