将 `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 == 1g2 == 1 以及 (b) g1g2 不存在缺失值时,我想保留这些行。我可以用 filter_atall_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_varsany_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