在R中指定NA类(对于if_else,dplyr)

时间:2017-08-31 06:29:29

标签: r dplyr

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

3 个答案:

答案 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)