我正在尝试编写以下脚本,但即使认为满足所有其他变量的条件,我也只能得到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)))))
答案 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