between.Rd
Intended for use in i
in [.data.table
.
between
is equivalent to lower<=x & x<=upper
when
incbounds=TRUE
, or lower<x & y<upper
when FALSE
. With a caveat that
NA
in lower
or upper
are taken as unlimited bounds not NA
.
This can be changed by setting NAbounds
to NA
.
inrange
checks whether each value in x
is in between any of
the intervals provided in lower,upper
.
between(x, lower, upper, incbounds=TRUE, NAbounds=TRUE, check=FALSE) x %between% y inrange(x, lower, upper, incbounds=TRUE) x %inrange% y
x  Any orderable vector, i.e., those with relevant methods for


lower  Lower range bound. Either length 1 or same length as 
upper  Upper range bound. Either length 1 or same length as 
y  A length2 
incbounds 

NAbounds  If 
check  Produce error if 
nonequi 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.
Logical vector the same length as x
with value TRUE
for those
that lie within the specified range.
Current implementation does not make use of ordered keys for
%between%
.
data.table
, like
, %chin%
#> a b c #> 1: 2 7 4 #> 2: 3 8 3 #> 3: 4 9 2X[between(b, 7, 9)] # same as above#> a b c #> 1: 2 7 4 #> 2: 3 8 3 #> 3: 4 9 2#> a b c #> 1: 1 6 5 #> 2: 2 7 4 #> 3: 3 8 3X[between(c, a, b)] # same as above#> a b c #> 1: 1 6 5 #> 2: 2 7 4 #> 3: 3 8 3X[between(c, a, b, incbounds=FALSE)] # open interval#> a b c #> 1: 1 6 5 #> 2: 2 7 4# 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]#> a val #> 1: 8 0.67176682 #> 2: 3 0.05861411 #> 3: 10 0.99706914 #> 4: 7 0.14903547Y[inrange(a, range$start, range$end)] # same as above#> a val #> 1: 8 0.67176682 #> 2: 3 0.05861411 #> 3: 10 0.99706914 #> 4: 7 0.14903547Y[inrange(a, range$start, range$end, incbounds=FALSE)] # open interval#> a val #> 1: 8 0.67176682 #> 2: 3 0.05861411 #> 3: 7 0.14903547