r - 使用 R 中的过滤器函数过滤具有多个变量的多个条件
问题描述
我正在处理一个数据集,我试图在开始对其运行操作之前过滤掉一些数据。但是,我遇到以下问题:
直到使用 select() 我从选定的变量中获取所有数据。
一旦我尝试对一个变量应用过滤器,它就会显示过滤后的数据。但是,一旦我尝试执行第二个条件,它就会打印出 0 个观察值。
任何帮助将非常感激。我试图弄清楚这是否只是语义上的错误,或者我缺少一些语法问题。我一直在寻找,无法找到解决方法。我觉得这个问题与逻辑运算符有关,但我无法弄清楚需要去那里。
不等于运算符用于数据集中的特定“编码”值。
编码:
select(X1, X2, X3, X4) %>%
filter(X1 != "97" &
X1 != "98" &
X1 != "99" &
X2 != "88" &
X2 != "77" &
X2 != "99" &
X3 != "88" &
X3 != "77" &
X4 != "99" &
!is.na(X1)
!is.na(X2)
!is.na(X3)
!is.na(X4))
解决方案
为了补充 Marcelo Avila 的答案,{dplyr} 中还有if_any
and if_all
。请注意,您也可以使用NA
inside ! .x %in% c(NA, 99, 88)
。
library(dplyr)
# data taken from Marcelo's answer
vec <- c(NA, 80:99)
set.seed(42)
df <- data.frame(
X1 = sample(vec, 20, replace = T),
X2 = sample(vec, 20, replace = T),
X3 = sample(vec, 20, replace = T),
X4 = sample(vec, 20, replace = T)) %>% as_tibble()
df %>%
filter(!if_any(X1:X4, is.na),
!if_any(X1:X2, ~ .x %in% c(97, 98, 99)),
!X3 %in% c(88, 77),
X4 != 99)
#> # A tibble: 12 x 4
#> X1 X2 X3 X4
#> <int> <int> <int> <int>
#> 1 95 83 99 90
#> 2 88 86 84 89
#> 3 82 81 80 81
#> 4 95 88 81 83
#> 5 93 89 99 92
#> 6 85 93 80 83
#> 7 82 86 84 80
#> 8 92 82 86 95
#> 9 93 83 95 92
#> 10 81 82 85 86
#> 11 87 80 82 86
#> 12 91 95 87 82
由reprex 包于 2021-06-26 创建(v0.3.0)
推荐阅读
- javascript - 遇到一个javascript代码,我看不懂
- java - 使用嵌入的 CSS 选择器识别文本,该选择器又位于
- python - Keras LSTM 类型错误消息
- jupyter-notebook - 如何在 jupyter 中打印希腊字母
- windows - Windows - 仅将项目添加到当前用户的 PNG 文件的上下文菜单
- api - ActiveCollab 使用 API v1 更新发票状态
- r - 如何使用ggplot将颜色更改为三角形图?
- swift - httpBody [Any] 到 alamofire
- python - rpy2错误加载给定正确目录的特定包
- c++ - g++ 在多个文件上与使用 Google 模拟的单一文件相比要慢得多