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(.))
#> <predicate intersection> #> <quosure> #> expr: ^is.na(.) #> env: 0xbe6fb38
#> <predicate union> #> <quosure> #> expr: ^is.na(.) #> env: 0xbe6fb38
# You can take the intersection of the replicated expressions: filter_all(mtcars, all_vars(. > 150))
#> [1] mpg cyl disp hp drat wt qsec vs am gear carb #> <0 rows> (or 0-length row.names)
# Or the union: filter_all(mtcars, any_vars(. > 150))
#> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 4 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 5 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 6 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 7 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 #> 8 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 #> 9 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 #> 10 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 #> 11 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 #> 12 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 #> 13 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 #> 14 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 #> 15 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 #> 16 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 #> 17 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 #> 18 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 #> 19 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 #> 20 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 #> 21 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
# 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))
#> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 #> 6 14.3 8 360 245 3.21 3.570 15.84 0 0 3 4 #> 7 10.4 8 472 205 2.93 5.250 17.98 0 0 3 4 #> 8 10.4 8 460 215 3.00 5.424 17.82 0 0 3 4 #> 9 14.7 8 440 230 3.23 5.345 17.42 0 0 3 4 #> 10 15.5 8 318 150 2.76 3.520 16.87 0 0 3 2 #> 11 15.2 8 304 150 3.15 3.435 17.30 0 0 3 2 #> 12 13.3 8 350 245 3.73 3.840 15.41 0 0 3 4 #> 13 19.2 8 400 175 3.08 3.845 17.05 0 0 3 2
# And filter_if() selects variables with a predicate function: filter_if(mtcars, ~ all(floor(.) == .), all_vars(. != 0))
#> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 3 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 4 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 5 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 6 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 7 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
# We're working on a new syntax to allow functions instead, # including purrr-like lambda functions. This is already # operational, but there's currently no way to specify the union of # the predicate results: mtcars %>% filter_at(vars(hp, vs), ~ . %% 2 == 0)
#> mpg cyl disp hp drat wt qsec vs am gear carb #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 #> 4 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 #> 5 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 #> 6 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 #> 7 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 #> 8 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 #> 9 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4