dplyr 过滤器保持 NAs AND OR 条件
dplyr filter keep the NAs AND OR conditions
我有以下包含 10 个条目的数据:
test_data_1 <- structure(list(Art = c(188, NA, NA, 140, NA, 182, NA, NA, 182,
NA)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"
))
假设我只想保留 NA,188 和 140。所以我尝试了以下命令:
test_data_1 %>% filter(is.na(Art), Art != 182) # with | instead of a comma, it works
使用此命令,会产生一个条目为零的小标题。为什么我必须使用 |符号而不是逗号?该站点 (https://sebastiansauer.github.io/dplyr_filter/) 指出:“可以组合多个逻辑比较。只需使用逗号将它们相加即可;这相当于逻辑或“加法”:“所以逗号应该充当 OR,但它不会”吨。
另一种方法:
test_data_1 %>% filter(Art != 182)
这里dplyr默认删除了6个NAs条目,这不是我想要的。命令 na.rm=FALSE 也无济于事。现在保留零条目。这是为什么?为什么不至少保留条目 188 和 140?
test_data_1 %>% filter(Art != 182, na.rm=FALSE)
最后一个问题:如果我想在一列中保留各种数字,我可以使用 %in% 后跟一个向量,例如:
test_data_1 %>% filter(Art %in% c(140,188))
但是如果我只是想保留 NA 并且例如140?
使用 |
而不是 &
。使用filter
,将,
分隔的多个表达式视为&
。不可能有既 NA
又不等于 182
的值
library(dplyr)
test_data_1 %>%
filter(is.na(Art) | Art != 182)
-输出
# A tibble: 8 × 1
Art
<dbl>
1 188
2 NA
3 NA
4 140
5 NA
6 NA
7 NA
8 NA
问题的第二部分是%in%
。我们可以再次使用|
test_data_1 %>%
filter(Art %in% c(140,188) | is.na(Art))
# A tibble: 8 × 1
Art
<dbl>
1 188
2 NA
3 NA
4 140
5 NA
6 NA
7 NA
8 NA
注意:默认情况下,filter
会删除 NA
元素。另外,filter
中没有na.rm
参数
我有以下包含 10 个条目的数据:
test_data_1 <- structure(list(Art = c(188, NA, NA, 140, NA, 182, NA, NA, 182,
NA)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"
))
假设我只想保留 NA,188 和 140。所以我尝试了以下命令:
test_data_1 %>% filter(is.na(Art), Art != 182) # with | instead of a comma, it works
使用此命令,会产生一个条目为零的小标题。为什么我必须使用 |符号而不是逗号?该站点 (https://sebastiansauer.github.io/dplyr_filter/) 指出:“可以组合多个逻辑比较。只需使用逗号将它们相加即可;这相当于逻辑或“加法”:“所以逗号应该充当 OR,但它不会”吨。 另一种方法:
test_data_1 %>% filter(Art != 182)
这里dplyr默认删除了6个NAs条目,这不是我想要的。命令 na.rm=FALSE 也无济于事。现在保留零条目。这是为什么?为什么不至少保留条目 188 和 140?
test_data_1 %>% filter(Art != 182, na.rm=FALSE)
最后一个问题:如果我想在一列中保留各种数字,我可以使用 %in% 后跟一个向量,例如:
test_data_1 %>% filter(Art %in% c(140,188))
但是如果我只是想保留 NA 并且例如140?
使用 |
而不是 &
。使用filter
,将,
分隔的多个表达式视为&
。不可能有既 NA
又不等于 182
library(dplyr)
test_data_1 %>%
filter(is.na(Art) | Art != 182)
-输出
# A tibble: 8 × 1
Art
<dbl>
1 188
2 NA
3 NA
4 140
5 NA
6 NA
7 NA
8 NA
问题的第二部分是%in%
。我们可以再次使用|
test_data_1 %>%
filter(Art %in% c(140,188) | is.na(Art))
# A tibble: 8 × 1
Art
<dbl>
1 188
2 NA
3 NA
4 140
5 NA
6 NA
7 NA
8 NA
注意:默认情况下,filter
会删除 NA
元素。另外,filter
na.rm
参数