将 `dplyr::filter_at` 与多个谓词表达式一起使用
Use `dplyr::filter_at` with multiple predicate expression
考虑以下小标题。
# A tibble: 5 x 3
g1 g2 a
<dbl> <dbl> <int>
1 1 1 1
2 1 NA 2
3 2 1 3
4 2 2 4
5 2 2 5
当且仅当 (a) g1 == 1
和 g2 == 1
以及 (b) g1
和 g2
不存在缺失值时,我想保留这些行。我可以用 filter_at
和 all_vars
来做到这一点。见下文。
df <- tibble(
g1 = c(1, 1, 2, 2, 2),
g2 = c(1, NA, 1, 2, 2),
a = c(1 : 5)
)
df %>% filter_at(vars(starts_with("g")), all_vars(. == 1)) %>%
filter_at(vars(starts_with("g")), all_vars(!is.na(.)))
我的问题是如何将上面的两行 filter_at
组合成如下内容:
df %>% filter_at(vars(starts_with("g")), all_vars(. == 1) & all_vars(!is.na(.)))
好像all_vars
或any_vars
只能取一个表达式。
可以在all_vars()
里面使用&
来使用多个条件。
df %>%
filter_at(vars(starts_with("g")), all_vars(. == 1 & !is.na(.) ) )
# A tibble: 1 x 3
g1 g2 a
<dbl> <dbl> <int>
1 1 1 1
考虑以下小标题。
# A tibble: 5 x 3
g1 g2 a
<dbl> <dbl> <int>
1 1 1 1
2 1 NA 2
3 2 1 3
4 2 2 4
5 2 2 5
当且仅当 (a) g1 == 1
和 g2 == 1
以及 (b) g1
和 g2
不存在缺失值时,我想保留这些行。我可以用 filter_at
和 all_vars
来做到这一点。见下文。
df <- tibble(
g1 = c(1, 1, 2, 2, 2),
g2 = c(1, NA, 1, 2, 2),
a = c(1 : 5)
)
df %>% filter_at(vars(starts_with("g")), all_vars(. == 1)) %>%
filter_at(vars(starts_with("g")), all_vars(!is.na(.)))
我的问题是如何将上面的两行 filter_at
组合成如下内容:
df %>% filter_at(vars(starts_with("g")), all_vars(. == 1) & all_vars(!is.na(.)))
好像all_vars
或any_vars
只能取一个表达式。
可以在all_vars()
里面使用&
来使用多个条件。
df %>%
filter_at(vars(starts_with("g")), all_vars(. == 1 & !is.na(.) ) )
# A tibble: 1 x 3
g1 g2 a
<dbl> <dbl> <int>
1 1 1 1