我有一个由调查现场创建的数据集,他们为一些标签引入了大写撇号。 当我使用 Haven 包导入它时,那些大写撇号仍然保留。 我想将它们全部替换为直撇号。 在理想的情况下,这将为所有这些撇号完成,但如果我这样做,它会改变所有级别的顺序,这是我想避免的事情。
因此,作为第二种解决方案,我想将所有因素(例如“不知道”)更改为“不知道”(或者为了便于使用,现在更改为“DK”)。
当我使用 mutate_if 时,当该级别不存在时我会收到一条警告消息(这很公平)。
tbl_dat <- tibble(var01 = factor(c("Don’t know", "Cat 1")),
var02 = factor(c("No answer", "Cat 2")))
tbl_dat <- tbl_dat %>%
mutate_if(is.factor,
fct_recode,
"DK" = "Don’t know")
警告
Warning in `mutate()`:
ℹ In argument: `var01 = (function (.f, ...) ...`.
Caused by warning:
! Unknown levels in `f`: Don’t know
如何保持因子水平(即不将其更改为字符,然后返回因子),但在所有变量上执行此操作,而不必预先选择具有该水平的变量?在理想情况下,我不想忽略或抑制警告,而是首先避免它们。
您可以通过检查每个因子列中是否有水平来解决此问题:
tbl_dat %>%
mutate(across(where(is.factor), ~ if ("Don’t know" %in% levels(.)) {
fct_recode(., "DK" = "Don’t know")
} else {.}
))
# var01 var02
# <fct> <fct>
# 1 DK No answer
# 2 Cat 1 Cat 2