如何使用 forcats 重新编码多个值而不在 R 中重复

How to recode multiple values using forcats without repetition in R

我想使用 forcats 重新编码因子 x 使用像 yes = "bad", yes = "2", no = "3", no = "good" 这样的映射但是无需重复代码。 类似于 yes = levels(x)[1:2]no = levels(x)[3:4].

<!-- language-all: lang-r -->


    library(forcats)

    x <- factor(c("bad", "2", "2", "good", "3", "3", "3", "good"),
                levels = c("bad",2,3,"good"))

    fct_recode(x, yes = "bad", yes = "2", no = "3", no = "good")
    #> [1] yes yes yes no  no  no  no  no 
    #> Levels: yes no

    # I don't want to repeat yes and no
    levels(x)[1:2] # should be yes
    #> [1] "bad" "2"
    levels(x)[3:4] # should be no
    #> [1] "3"    "good"

reprex package (v0.3.0)

于 2020-10-03 创建

您可以使用 fct_collapse :

library(forcats)
#By explicitly mentioning the levels to collapse
fct_collapse(x, yes  = c('bad', '2'), no = c('3', 'good'))
#[1] yes yes yes no  no  no  no  no 
#Levels: yes no

#By using levels
fct_collapse(x, yes  = levels(x)[1:2], no = levels(x)[3:4])
#[1] yes yes yes no  no  no  no  no 
#Levels: yes no