【发布时间】:2018-02-27 10:32:14
【问题描述】:
考虑这些factor 对象:
x <- factor(c(1,2,2,4,5), 1:5, labels = c('Ja', 'Nein', '', 'Weiß nicht', 'Keine Antwort'))
y <- factor(c(1:5), 1:5, labels = c('Ja', 'Nein', '', 'Weiß nicht', 'Keine Antwort'))
> table(x)
x
Ja Nein Weiß nicht Keine Antwort
1 2 0 1 1
> table(y)
y
Ja Nein Weiß nicht Keine Antwort
1 1 1 1 1
我正在尝试使用dplyr::recode 重新编码各种变量。我无法获得将空字符串级别重新编码为 NA 并删除特定因子级别的函数。
使用
dplyr::recode(x,
"Weiß nicht" = NA_character_,
"Weiß nicht " = NA_character_,
"Keine Antwort" = NA_character_,
"Keine Antwort " = NA_character_,
"k.A." = NA_character_,
"Keine Angabe" = NA_character_,
"0" = NA_character_,
"" = NA_character_)
将导致错误消息 (Error: attempt to use zero-length variable name)。使用
z <- dplyr::recode(na_if(x, ""),
"Weiß nicht" = NA_character_,
"Weiß nicht " = NA_character_,
"Keine Antwort" = NA_character_,
"Keine Antwort " = NA_character_,
"k.A." = NA_character_,
"Keine Angabe" = NA_character_,
"0" = NA_character_)
如Recode character vector with some empty strings 中所述并没有摆脱空字符串级别:
> table(z)
z
Ja Nein
1 2 0
> levels(z)
[1] "Ja" "Nein" ""
此外,我不能简单地使用droplevels,因为我想对可能需要保留空类别的变量使用该函数。
解决方案需要提供给事物:
- 将任何出现的
""重新编码为NA。 - 从
factor变量中删除级别"",即使它未使用(如x),也不会删除每个未使用的级别。
【问题讨论】: