if_else 没有按预期返回 NA(而是返回 false 条件)

cap*_*aed 0 r dplyr

我已经看到几个问题围绕这个问题跳舞,但似乎没有一个直接解决它。

我在数据框列中有字符数据,有些值为NA. 在if_else()帮助文件例子表明,它会留下NA作为NA,除非与另有规定missing的说法。

但是,在我的情况下,它认为NA它符合false参数标准,并以这种方式返回。这是预期的行为吗?是因为使用字符数据吗?我能看到预期的行为从帮助文件代码整数数据。

我查过str(my_df$test_vector),是字符数据,不是因子数据。

在此先感谢论坛大师。

例子:

> test_vector <- c("1dose", "2dose", "yes", "no", "undecided", NA) # data as it appears in my dataframe
> is.na(test_vector)  # behaves as expected
[1] FALSE FALSE FALSE FALSE FALSE  TRUE 
> if_else(test_vector %in% c("1dose", "2dose", "yes"), "yes", "no")  # does not behave as expected
[1] "yes" "yes" "yes" "no"  "no"  "no"
> if_else(test_vector %in% c("1dose", "2dose", "yes"), "yes", "no", NA_character_)  # also unexpected
[1] "yes" "yes" "yes" "no"  "no"  "no" 
Run Code Online (Sandbox Code Playgroud)

Dan*_*Dan 5

运算符 %in% 针对 NA 值返回 false:

test_vector %in% c("1dose", "2dose", "yes")
[1]  TRUE  TRUE  TRUE FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

我相信 str_detect 会给你你正在寻找的行为:

> if_else(str_detect(test_vector, c("1dose", "2dose", "yes")),"yes","no")
[1] "yes" "yes" "yes" "no"  "no"  NA
Run Code Online (Sandbox Code Playgroud)