2016-01-13 162 views
5

我已经在R中写了下面的代码,它工作正常。但是,假设我必须对具有多个级别(> 6)的因子变量应用类似的代码,则ifelse语句可能非常难以阅读。我想知道是否有其他更有效的方法来编写易于阅读的代码,但仍然使用dplyr。ifelse语句与dplyr变异

library(dplyr) 
    mtcars %>% arrange(gear) %>% 
    mutate(gearW = ifelse(gear == 3, "Three", ifelse(gear == 4, "Four", "Five"))) 

回答

5

我们可以使用factor

mtcars %>% 
    arrange(gear) %>% 
    mutate(gearW = as.character(factor(gear, levels=3:5, 
     labels= c("three", "four", "five")))) 

或者另一种选择是english

library(english) 
mtcars %>% 
     arrange(gear) %>% 
     mutate(gearW = as.character(english(gear))) 

编辑:从@大卫Arenburg的和@Konrad鲁道夫的意见增加了as.character

+1

太棒了!感谢您的快速回答! –

+2

请注意,这会让'factor'成为结果类型,而不是'character'。这很好,但有时会出乎意料。必要时将其强制为“人物”。 –

+0

@KonradRudolph,谢谢你的有用见解!我会记住这一点。 –