r - 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"
解决方案
运算符 %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
推荐阅读
- javascript - 如何使用 Redux 更新对象数组中的状态?
- c# - 用于获取 LINQ 的表达式,用于 SQL IN() 的包含到 EF,其中实体子属性等于值
- php - .htaccess - 不对 API 调用应用重写规则
- node.js - Discord Bot (node.js):从外部文件读取数据
- c - 在c中获取数组/向量的大小
- sql-server - 通过 Linux + ODBC + Active Directory 身份验证连接到 Azure SQL Server
- c# - msbuild中的集合包含或交集?
- vue.js - 如何在 vuejs 中添加指向 assets/pdf 的链接
- c - 是否有任何方法可以测试询问过程是否已分配地址
- javascript - 登录尝试失败时的模式弹出窗口