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

Uma*_*mao 5 r dplyr

if_else()函数中dplyr,它要求if:TRUE和if:FALSE元素属于同一个类.

我希望NA从我的if_else()发言中回复.

但是,例如

if_else(mtcars$cyl > 5, NA, 1)
Run Code Online (Sandbox Code Playgroud)

回报

错误:false类型'double'不是'逻辑'

因为简单地读入NA是合乎逻辑的,1是数字(双重).

包裹as.numeric()周围的NA正常工作:例如,

if_else(mtcars$cyl > 5, as.numeric(NA), 1)
Run Code Online (Sandbox Code Playgroud)

回报

1 NA NA 1 NA NA NA NA 1 1 NA NA NA NA NA NA NA NA 1 1 1 1 NA NA NA NA 1 1 1 NA NA NA 1

正如我所希望的那样.

但这感觉有点傻/不必要.是否有更好的输入方式NA作为" 数字NA "而不是像这样包装?

NB这仅适用于严格的dplyr::if_else不是base::ifelse.

小智 11

你可以使用NA_real_

if_else(mtcars$cyl > 5, NA_real_, 1)
Run Code Online (Sandbox Code Playgroud)