# between

##### Convenience functions for range subsets.

Intended for use in `i`

in `[.data.table`

.

`between`

is equivalent to `x >= lower & x <= upper`

when
`incbounds=TRUE`

, or `x > lower & y < upper`

when `FALSE`

. With a caveat that
`NA`

in `lower`

or `upper`

are taken as a missing bound and return `TRUE`

not `NA`

.

`inrange`

checks whether each value in `x`

is in between any of
the intervals provided in `lower,upper`

.

- Keywords
- data

##### Usage

```
between(x, lower, upper, incbounds=TRUE)
x %between% y
```inrange(x, lower, upper, incbounds=TRUE)
x %inrange% y

##### Arguments

- x
Any orderable vector, i.e., those with relevant methods for

``<=``

, such as`numeric`

,`character`

,`Date`

, etc. in case of`between`

and a numeric vector in case of`inrange`

.- lower
Lower range bound. Either length 1 or same length as

`x`

.- upper
Upper range bound. Either length 1 or same length as

`x`

.- y
A length-2

`vector`

or`list`

, with`y[[1]]`

interpreted as`lower`

and`y[[2]]`

as`upper`

.- incbounds
`TRUE`

means inclusive bounds, i.e., [lower,upper].`FALSE`

means exclusive bounds, i.e., (lower,upper). It is set to`TRUE`

by default for infix notations.

##### Details

*non-equi* joins were implemented in `v1.9.8`

. They extend
binary search based joins in `data.table`

to other binary operators
including `>=, <=, >, <`

. `inrange`

makes use of this new
functionality and performs a range join.

##### Value

Logical vector the same length as `x`

with value `TRUE`

for those
that lie within the specified range.

##### Note

Current implementation does not make use of ordered keys for
`%between%`

.

##### See Also

##### Examples

```
# NOT RUN {
X = data.table(a=1:5, b=6:10, c=c(5:1))
X[b %between% c(7,9)]
X[between(b, 7, 9)] # same as above
# NEW feature in v1.9.8, vectorised between
X[c %between% list(a,b)]
X[between(c, a, b)] # same as above
X[between(c, a, b, incbounds=FALSE)] # open interval
# inrange()
Y = data.table(a=c(8,3,10,7,-10), val=runif(5))
range = data.table(start = 1:5, end = 6:10)
Y[a %inrange% range]
Y[inrange(a, range$start, range$end)] # same as above
Y[inrange(a, range$start, range$end, incbounds=FALSE)] # open interval
# }
```

*Documentation reproduced from package data.table, version 1.12.0, License: MPL-2.0 | file LICENSE*