iv_count_between() counts instances of when needles, a vector, falls
between the bounds of haystack, an iv. It works similar to base::match(),
where needles[i] checks for a match in all of haystack.
This function returns an integer vector the same size as needles
containing a count of the times where the i-th value of needles
fell between any interval of haystack.
Arguments
- needles
[vector, iv]needlesshould be a vector andhaystackshould be an iv.needlesshould have the same type as the start/end components ofhaystack.Each element of
needlesrepresents the value to search for.haystackrepresents the intervals to search in.
- haystack
[vector, iv]needlesshould be a vector andhaystackshould be an iv.needlesshould have the same type as the start/end components ofhaystack.Each element of
needlesrepresents the value to search for.haystackrepresents the intervals to search in.
- ...
These dots are for future extensions and must be empty.
- missing
[integer(1) / "equals" / "error"]Handling of missing values in
needles."equals"considers missing values inneedlesas exactly equal to missing intervals inhaystackwhen determining if there is a matching relationship between them."error"throws an error if any values inneedlesare missing.If a single integer value is provided, this represents the count returned for a missing value in
needles. Use0Lto force missing values to never match.
- no_match
[integer(1) / "error"]Handling of
needleswithout a match."error"throws an error if any needles have zero matches.If a single integer is provided, this represents the count returned for a needle with zero matches. The default value gives unmatched needles a count of
0L.
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)
# Count the number of times `x` is between the intervals in `y`
iv_count_between(x, y)
#> [1] 1 1 2 0
# ---------------------------------------------------------------------------
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 intervals in `haystack`, so the missing value in `a` is
# considered between the missing interval in `b`.
iv_count_between(a, b)
#> [1] 0 2
# If you'd like to propagate missing values, set `missing = NA`
iv_count_between(a, b, missing = NA)
#> [1] 0 NA
# If you'd like missing values to be treated as unmatched, set
# `missing = 0L`
iv_count_between(a, b, missing = 0L)
#> [1] 0 0