Skip to content

This is a shortcut for x >= left & x <= right, implemented for local vectors and translated to the appropriate SQL for remote tables.

Usage

between(x, left, right, ..., ptype = NULL)

Arguments

x

A vector

left, right

Boundary values. Both left and right are recycled to the size of x.

...

These dots are for future extensions and must be empty.

ptype

An optional prototype giving the desired output type. The default is to compute the common type of x, left, and right using vctrs::vec_cast_common().

Value

A logical vector the same size as x with a type determined by ptype.

Details

x, left, and right are all cast to their common type before the comparison is made. Use the ptype argument to specify the type manually.

See also

join_by() if you are looking for documentation for the between() overlap join helper.

Examples

between(1:12, 7, 9)
#>  [1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE
#> [12] FALSE

x <- rnorm(1e2)
x[between(x, -1, 1)]
#>  [1]  0.93536319  0.17648861  0.24368546  0.11203808 -0.13399701
#>  [6] -0.27923724 -0.31344598  0.07003485 -0.63912332 -0.04996490
#> [11] -0.25148344  0.44479712  0.04653138  0.57770907  0.11819487
#> [16]  0.86208648 -0.24323674 -0.20608719  0.01917759  0.02956075
#> [21]  0.54982754 -0.36122126  0.21335575 -0.66508825 -0.24589641
#> [26] -0.97585062  0.13167063  0.48862881  0.28415034  0.23669628
#> [31]  0.52390979  0.60674805 -0.10993567  0.17218172 -0.09032729
#> [36]  0.74879127  0.55622433 -0.54825726 -0.15569378  0.43388979
#> [41] -0.38195111  0.42418757 -0.03810289  0.48614892 -0.35436116
#> [46]  0.94634789 -0.29664002 -0.38721358 -0.78543266 -0.79554143
#> [51] -0.69053790 -0.55854199 -0.53666333  0.22712713  0.97845492
#> [56] -0.20888265  0.25853729 -0.44179945  0.56859986  0.42485844
#> [61]  0.24940178  0.44945378  0.42656655  0.10758399  0.02229473
#> [66]  0.60361101 -0.26265057 -0.52826408  0.19214942

# On a tibble using `filter()`
filter(starwars, between(height, 100, 150))
#> # A tibble: 5 × 14
#>   name       height  mass hair_color skin_color eye_color birth_year sex  
#>   <chr>       <int> <dbl> <chr>      <chr>      <chr>          <dbl> <chr>
#> 1 Leia Orga…    150    49 brown      light      brown             19 fema…
#> 2 Mon Mothma    150    NA auburn     fair       blue              48 fema…
#> 3 Watto         137    NA black      blue, grey yellow            NA male 
#> 4 Sebulba       112    40 none       grey, red  orange            NA male 
#> 5 Gasgano       122    NA none       white, bl… black             NA male 
#> # ℹ 6 more variables: gender <chr>, homeworld <chr>, species <chr>,
#> #   films <list>, vehicles <list>, starships <list>

# Using the `ptype` argument with ordered factors, where otherwise everything
# is cast to the common type of character before the comparison
x <- ordered(
  c("low", "medium", "high", "medium"),
  levels = c("low", "medium", "high")
)
between(x, "medium", "high")
#> [1] FALSE FALSE FALSE FALSE
between(x, "medium", "high", ptype = x)
#> [1] FALSE  TRUE  TRUE  TRUE