首页 > 解决方案 > if_else 未按预期返回 NA(而是返回错误条件)

问题描述

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

我在数据框列中有字符数据,一些值是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" 

标签: rdplyr

解决方案


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

test_vector %in% c("1dose", "2dose", "yes")
[1]  TRUE  TRUE  TRUE FALSE FALSE FALSE

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

> if_else(str_detect(test_vector, c("1dose", "2dose", "yes")),"yes","no")
[1] "yes" "yes" "yes" "no"  "no"  NA

推荐阅读