我看到有几个问题围绕着这个问题,但似乎没有一个能直接解决它。
我在数据帧列中有字符数据,有些值是NA
。if_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