filter_all function

Filter within a selection of variables

Filter within a selection of variables

Scoped verbs (_if, _at, _all) have been superseded by the use of if_all() or if_any() in an existing verb. See vignette("colwise") for details.

These scoped filtering verbs apply a predicate expression to a selection of variables. The predicate expression should be quoted with all_vars() or any_vars() and should mention the pronoun . to refer to variables.

filter_all(.tbl, .vars_predicate, .preserve = FALSE) filter_if(.tbl, .predicate, .vars_predicate, .preserve = FALSE) filter_at(.tbl, .vars, .vars_predicate, .preserve = FALSE)

Arguments

  • .tbl: A tbl object.

  • .vars_predicate: A quoted predicate expression as returned by all_vars() or any_vars().

    Can also be a function or purrr-like formula. In this case, the intersection of the results is taken by default and there's currently no way to request the union.

  • .preserve: when FALSE (the default), the grouping structure is recalculated based on the resulting data, otherwise it is kept as is.

  • .predicate: A predicate function to be applied to the columns or a logical vector. The variables for which .predicate is or returns TRUE are selected. This argument is passed to rlang::as_function() and thus supports quosure-style lambda functions and strings representing function names.

  • .vars: A list of columns generated by vars(), a character vector of column names, a numeric vector of column positions, or NULL.

Grouping variables

The grouping variables that are part of the selection are taken into account to determine filtered rows.

Examples

# While filter() accepts expressions with specific variables, the # scoped filter verbs take an expression with the pronoun `.` and # replicate it over all variables. This expression should be quoted # with all_vars() or any_vars(): all_vars(is.na(.)) any_vars(is.na(.)) # You can take the intersection of the replicated expressions: filter_all(mtcars, all_vars(. > 150)) # -> filter(mtcars, if_all(everything(), ~ .x > 150)) # Or the union: filter_all(mtcars, any_vars(. > 150)) # -> filter(mtcars, if_any(everything(), ~ . > 150)) # You can vary the selection of columns on which to apply the # predicate. filter_at() takes a vars() specification: filter_at(mtcars, vars(starts_with("d")), any_vars((. %% 2) == 0)) # -> filter(mtcars, if_any(starts_with("d"), ~ (.x %% 2) == 0)) # And filter_if() selects variables with a predicate function: filter_if(mtcars, ~ all(floor(.) == .), all_vars(. != 0)) # -> is_int <- function(x) all(floor(x) == x) filter(mtcars, if_all(where(is_int), ~ .x != 0))
  • Maintainer: Hadley Wickham
  • License: MIT + file LICENSE
  • Last published: 2023-11-17