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

  • 本文关键字:返回 NA false 条件 else r-if r dplyr
  • 更新时间 :
  • 英文 :


我看到有几个问题围绕着这个问题,但似乎没有一个能直接解决它。

我在数据帧列中有字符数据,有些值是NAif_else()帮助文件示例表明,除非用missing参数另行指定,否则它将把NA保留为NA

然而,在我的情况下,它将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" 

运算符%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

您发现的问题与%in%运算符的行为有关,而与if_else((函数无关。%当将任何内容与NA进行比较时,%返回FALSE。

test_vector <- c("1dose", "2dose", "yes", "no", "undecided", NA)
> if_else(test_vector=='yes', 1, 0)
[1]  0  0  1  0  0 NA
> if_else(test_vector %in% 'yes', 1, 0)
[1] 0 0 1 0 0 0

最新更新