嵌套的if_else语句

时间:2018-08-06 17:48:59

标签: r dplyr

我正在尝试编写以下脚本,但即使认为满足所有其他变量的条件,我也只能得到7或40。我对循环不是很好,所以我不确定如何写:

Input2$SetUpTime<-  
    if_else(Input2$finished_surface_area_inches <   10,  "5",
    if_else(Input2$finished_surface_area_inches <   60,  "7",
    if_else(Input2$finished_surface_area_inches <  200, "10",
    if_else(Input2$finished_surface_area_inches < 1000, "20",
    if_else(Input2$finished_surface_area_inches < 4000, "40", NA)))))

1 个答案:

答案 0 :(得分:1)

dplyr::if_else()函数要求TRUE和FALSE返回值是同一类型。我们可以看到,例如"5"NA的类型不同:

typeof("5")
[1] "character"

typeof(NA)
[1] "logical"

一个简单的解决方法是将NA更改为NA_character_

typeof(NA_character_)
[1] "character"

除此之外,由于正在输入意外数据,您可能会得到意外结果。下面显示了您的嵌套将对“预期”数据起作用:

library(dplyr)
somedata <- c(9, 59, 199, 999, 3999, 4001)

res <- if_else(somedata <   10,  "5",
       if_else(somedata <   60,  "7",
       if_else(somedata <  200, "10",
       if_else(somedata < 1000, "20",
       if_else(somedata < 4000, "40", NA_character_)))))

res
[1] "5"  "7"  "10" "20" "40" NA