R/interval_assertions.R
missing_intervals_dt.Rd
Checks to see if the specified interval variable is missing any expected intervals.
assert_no_missing_intervals_dt(
dt,
id_cols,
col_stem,
expected_ints_dt,
quiet = FALSE
)
identify_missing_intervals_dt(
dt,
id_cols,
col_stem,
expected_ints_dt,
quiet = FALSE
)
[data.table()
]
Data containing the interval variable to check. Should include all 'id_cols'.
[character()
]
ID columns that uniquely identify each row of dt
. Should include
'col_stem_start' and 'col_stem_end'.
[character(1)
]
The name of the interval variable to check, should not include the
'_start' or '_end' suffix.
[data.table()
]
The expected intervals that should be completely included in ints_dt
.
Should include only 'col_stem_start' and 'col_stem_end' columns. Can
also be NULL
in which case expected_ints_dt
will automatically be set
to the minimum and maximum of each unique set of intervals in dt
.
[logical(1)
]
Should progress messages be suppressed as the function is run? Default is
False.
identify_missing_intervals_dt
returns a [data.table()
] with
id_cols
that are missing expected intervals. If no intervals are missing
then a zero-row [data.table()
] is returned.
assert_no_missing_intervals_dt
returns nothing but throws an error if
identify_missing_intervals
returns a non-empty data.table.
identify_missing_intervals_dt
works by first identifying each unique set of
intervals in dt
. Then checks one at a time the groups of rows of dt
that match each set of intervals.
expected_ints_dt = NULL
will automatically check that there are no missing
intervals between the minimum and maximum interval in each unique set. This
may miss identifying missing intervals at the beginning or end of the range.
input_dt <- data.table::data.table(
year = c(rep(2010, 20), rep(2015, 96)),
age_start = c(seq(0, 95, 5), seq(0, 95, 1)),
age_end = c(seq(5, 95, 5), Inf, seq(1, 95, 1), Inf),
value = 1
)
input_dt <- input_dt[!age_start %in% c(0, 10, 95)]
# expect intervals to cover the entire 0-Inf range
missing_dt <- identify_missing_intervals_dt(
dt = input_dt,
id_cols = c("year", "age_start", "age_end"),
col_stem = "age",
expected_ints_dt = data.table::data.table(age_start = 0, age_end = Inf)
)
#> Interval group 1 of 2: [1, 2),[2, 3),[3, 4),[4, 5),[5, 6),[6, 7),[7, 8),[8, 9),[9, 10),[11, 12),[12, 13),[13, 14),[14, 15),[15, 16),[16, 17),[17, 18),[18, 19),[19, 20),[20, 21),[21, 22),[22, 23),[23, 24),[24, 25),[25, 26),[26, 27),[27, 28),[28, 29),[29, 30),[30, 31),[31, 32),[32, 33),[33, 34),[34, 35),[35, 36),[36, 37),[37, 38),[38, 39),[39, 40),[40, 41),[41, 42),[42, 43),[43, 44),[44, 45),[45, 46),[46, 47),[47, 48),[48, 49),[49, 50),[50, 51),[51, 52),[52, 53),[53, 54),[54, 55),[55, 56),[56, 57),[57, 58),[58, 59),[59, 60),[60, 61),[61, 62),[62, 63),[63, 64),[64, 65),[65, 66),[66, 67),[67, 68),[68, 69),[69, 70),[70, 71),[71, 72),[72, 73),[73, 74),[74, 75),[75, 76),[76, 77),[77, 78),[78, 79),[79, 80),[80, 81),[81, 82),[82, 83),[83, 84),[84, 85),[85, 86),[86, 87),[87, 88),[88, 89),[89, 90),[90, 91),[91, 92),[92, 93),[93, 94),[94, 95)
#> Interval group 2 of 2: [5, 10),[15, 20),[20, 25),[25, 30),[30, 35),[35, 40),[40, 45),[45, 50),[50, 55),[55, 60),[60, 65),[65, 70),[70, 75),[75, 80),[80, 85),[85, 90),[90, 95)
# expect intervals to cover between the minimum and maximum of each grouping
missing_dt <- identify_missing_intervals_dt(
dt = input_dt,
id_cols = c("year", "age_start", "age_end"),
col_stem = "age",
expected_ints_dt = NULL
)
#> Interval group 1 of 2: [1, 2),[2, 3),[3, 4),[4, 5),[5, 6),[6, 7),[7, 8),[8, 9),[9, 10),[11, 12),[12, 13),[13, 14),[14, 15),[15, 16),[16, 17),[17, 18),[18, 19),[19, 20),[20, 21),[21, 22),[22, 23),[23, 24),[24, 25),[25, 26),[26, 27),[27, 28),[28, 29),[29, 30),[30, 31),[31, 32),[32, 33),[33, 34),[34, 35),[35, 36),[36, 37),[37, 38),[38, 39),[39, 40),[40, 41),[41, 42),[42, 43),[43, 44),[44, 45),[45, 46),[46, 47),[47, 48),[48, 49),[49, 50),[50, 51),[51, 52),[52, 53),[53, 54),[54, 55),[55, 56),[56, 57),[57, 58),[58, 59),[59, 60),[60, 61),[61, 62),[62, 63),[63, 64),[64, 65),[65, 66),[66, 67),[67, 68),[68, 69),[69, 70),[70, 71),[71, 72),[72, 73),[73, 74),[74, 75),[75, 76),[76, 77),[77, 78),[78, 79),[79, 80),[80, 81),[81, 82),[82, 83),[83, 84),[84, 85),[85, 86),[86, 87),[87, 88),[88, 89),[89, 90),[90, 91),[91, 92),[92, 93),[93, 94),[94, 95)
#> Interval group 2 of 2: [5, 10),[15, 20),[20, 25),[25, 30),[30, 35),[35, 40),[40, 45),[45, 50),[50, 55),[55, 60),[60, 65),[65, 70),[70, 75),[75, 80),[80, 85),[85, 90),[90, 95)