if_else()
中的dplyr
函数,it requires that both the if:TRUE and if:FALSE elements are of the same class。
我希望从我的NA
声明中返回if_else()
。
但是,例如。
if_else(mtcars$cyl > 5, NA, 1)
返回
错误:
false
类型为'double'而不是'logical'
因为简单地读入NA
是合乎逻辑的,1是数字(双精度)。
在as.numeric()
周围包裹NA
可以正常工作:例如
if_else(mtcars$cyl > 5, as.numeric(NA), 1)
返回
1 NA NA 1 NA NA NA NA 1 1 NA NA NA NA NA NA NA 1 1 1 1 NA NA NA NA 1 1 1 NA NA NA 1
正如我所希望的那样。
但这感觉有点傻/不必要。是否有更好的方式将NA
作为“数字NA
”输入,而不是像这样包装?
注意,这仅适用于更严格的dplyr::if_else
而不是base::ifelse
。
答案 0 :(得分:9)
你可以使用NA_real_
if_else(mtcars$cyl > 5, NA_real_, 1)
答案 1 :(得分:2)
尝试基本功能
ifelse(mtcars$cyl > 5, NA, 1)
答案 2 :(得分:0)
或者您可以使用if_else_
软件包中的hablar
。对于类型,它与if_else
中的dplyr
一样严格,但是允许通用NA。看到,
library(hablar)
if_else_(mtcars$cyl > 5, NA, 1)