我已经看到几个问题围绕这个问题跳舞,但似乎没有一个直接解决它。
我在数据框列中有字符数据,有些值为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)
运算符 %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)