r - 过滤 data.table 当且仅当条件被验证时,尽管 NA
问题描述
我想使用条件过滤我的数据,但 NA 的存在会影响结果。
例如:
dt <- data.table(a=c(1:4,NA), b=c(NA,2,1,4,5), d=c(1,2,NA,4,NA))
dt
a b d
1: 1 NA 1
2: 2 2 2
3: 3 1 NA
4: 4 4 4
5: NA 5 NA
当我做
subset(dt, !(b < a))
a b d
1: 2 2 2
2: 4 4 4
即,如果 a 或 b 为 NA,则排除该行:
但我想要的结果是
a b d
1: 1 NA 1
2: 2 2 2
3: 4 4 4
4: NA 5 NA
也就是说,当且仅当条件得到验证时,我只想排除一行。
如果我添加更多条件,就像subset(dt, is.na(a) | is.na(b) | !(b < a))
它按预期工作一样,但我正在寻找一种通过像&
and这样的运算符来表达“当且仅当”的方法|
这可能吗?
谢谢!
解决方案
这有效:
dt[!which(dt$b < dt$a), ]
a b d
1: 1 NA 1
2: 2 2 2
3: 4 4 4
4: NA 5 NA
在这个解决方法中,我只选择不返回的行TRUE
condition df$b < df$a
。这意味着他们可以返回FALSE
或NA
真正返回。
推荐阅读
- html - Django REST 可浏览 API 模板更改
- sql - 更改某些列的默认权限
- android - 如何禁用 RecyclerView 单击侦听器但滚动工作
- vba - 我需要帮助循环使用 Excel VBA 的 if 语句中的索引/匹配
- swift - 如何在swift中集成TPKeyboardavoiding?
- visual-studio-2017 - 如何配置 Visual Studio 2017 在发布时不生成 nuget 包作为输出
- ios - 在项目结构中找不到来自故事板的自定义视图控制器
- javascript - 如何使用 Google Calendar API v3 (JavaScript) 移除事件通知
- python - 为 2D numpy 数组形成协方差矩阵
- android - Kivy App 立即在 android 上崩溃,陷入循环