使用带有多个谓词表达式的`dplyr :: filter_at`

时间:2018-03-08 17:43:25

标签: r dplyr tidyverse

考虑以下因素。

 # 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只能使用一个表达式。

1 个答案:

答案 0 :(得分:0)

您可以在&内使用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