This family of functions detects different types of relationships between a
vector and an iv. It works similar to base::%in%, where needles[i]
checks for a match in all of haystack
.
iv_between()
detects whenneedles
, a vector, falls between the bounds inhaystack
, an iv.iv_includes()
detects whenneedles
, an iv, includes the values ofhaystack
, a vector.
This function returns a logical vector the same size as needles
containing
TRUE
if the value in needles
matches any value in haystack
and FALSE
otherwise.
Usage
iv_between(needles, haystack, ..., missing = "equals")
iv_includes(needles, haystack, ..., missing = "equals")
Arguments
- needles, haystack
[vector, iv]
For
iv_*_between()
,needles
should be a vector andhaystack
should be an iv.For
iv_*_includes()
,needles
should be an iv andhaystack
should be a vector.Each element of
needles
represents the value / interval to match.haystack
represents the values / intervals to match against.
- ...
These dots are for future extensions and must be empty.
- missing
[logical(1) / "equals" / "error"]
Handling of missing values in
needles
."equals"
considers missing values inneedles
as exactly equal to missing values inhaystack
when determining if there is a matching relationship between them. Matched missing values inneedles
result in aTRUE
value in the result, and unmatched missing values result in aFALSE
value."error"
throws an error if any values inneedles
are missing.If a single logical value is provided, this represents the value returned in the result for values in
needles
that are missing. You can force missing values to be unmatched by setting this toFALSE
, and you can force them to be propagated by setting this toNA
.
Examples
x <- as.Date(c("2019-01-05", "2019-01-10", "2019-01-07", "2019-01-20"))
y <- iv_pairs(
as.Date(c("2019-01-01", "2019-01-03")),
as.Date(c("2019-01-04", "2019-01-08")),
as.Date(c("2019-01-07", "2019-01-09")),
as.Date(c("2019-01-10", "2019-01-20")),
as.Date(c("2019-01-15", "2019-01-20"))
)
x
#> [1] "2019-01-05" "2019-01-10" "2019-01-07" "2019-01-20"
y
#> <iv<date>[5]>
#> [1] [2019-01-01, 2019-01-03) [2019-01-04, 2019-01-08) [2019-01-07, 2019-01-09)
#> [4] [2019-01-10, 2019-01-20) [2019-01-15, 2019-01-20)
# Detect if the i-th location in `x` is between any intervals in `y`
iv_between(x, y)
#> [1] TRUE TRUE TRUE FALSE
# Detect if the i-th location in `y` includes any value in `x`
iv_includes(y, x)
#> [1] FALSE TRUE TRUE TRUE FALSE
# ---------------------------------------------------------------------------
a <- c(1, NA)
b <- iv(c(NA, NA), c(NA, NA))
# By default, missing values in `needles` are treated as being exactly
# equal to missing values in `haystack`, so the missing value in `a` is
# considered between the missing interval in `b`.
iv_between(a, b)
#> [1] FALSE TRUE
iv_includes(b, a)
#> [1] TRUE TRUE
# If you'd like to propagate missing values, set `missing = NA`
iv_between(a, b, missing = NA)
#> [1] FALSE NA
iv_includes(b, a, missing = NA)
#> [1] NA NA
# If you'd like missing values to be treated as unmatched, set
# `missing = FALSE`
iv_between(a, b, missing = FALSE)
#> [1] FALSE FALSE
iv_includes(b, a, missing = FALSE)
#> [1] FALSE FALSE