【问题标题】:How to use if_else and mutate to substitute the value in charactor vector as condition?如何使用 if_else 和 mutate 将字符向量中的值替换为条件?
【发布时间】:2021-08-30 03:13:31
【问题描述】:

如果if_else中的条件不符合/不符合,我想在数据中生成一列之前的值,该值将与原始列相同。

代码如下:

iristest <- iris
iristest %>% mutate(Species=if_else(Species=='setosa','Setosa',Species))

这是错误:

#Error: Problem with `mutate()` column `Species`.
#i `Species = if_else(Species == "setosa", "Setosa", Species)`.
#x `false` must be a character vector, not a `factor` object.

我该如何解决这个问题?我知道可以用stringr 之类的char 函数来解决它,但我希望并认为它可以用mutate 的方式来解决。

【问题讨论】:

    标签: r if-statement dplyr


    【解决方案1】:

    base R中,我们可以设置levels

    levels(iristest$Species)[levels(iristest$Species) == 'setosa'] <- "Setosa"
    

    【讨论】:

    • 哦,简单易懂,谢谢!
    【解决方案2】:

    您可以使用以下 -

    library(dplyr)
    
    iristest %>% mutate(Species = factor(if_else(Species=='setosa',
                                  'Setosa',as.character(Species))))
    

    由于Species 的类型为factor,您可以使用特定于因子的函数来重新编码该值。在这里,我们可以使用来自forcatsfct_recode

    iristest %>% mutate(Species= forcats::fct_recode(Species, Setosa = 'setosa'))
    

    【讨论】:

    • 这正是我所需要的,很高兴学习fct_recode。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多