Filters observations from a processed_cube based on rule definitions.
Filtering reuses the rule infrastructure used by diagnose_cube(), but
applies row-level filtering logic through rule-specific filter_fn()
functions.
Arguments
- data_cube
A
processed_cubeobject as returned byb3gbi::process_cube().- rules
Character vector or list of cube rule objects. Ignored if
diagnosticsis supplied.- diagnostics
Optional
cube_diagnosticsobject returned bydiagnose_cube(). If provided, rules are extracted from this object.- ...
Additional arguments passed to rule-specific
filter_fn()functions.
Details
The function evaluates rule-specific filter_fn() functions that return
a logical vector indicating which rows should be removed. Only rules that
implement a filter_fn() are applied. Rules without a filtering function
are ignored.
Filtering rules operate independently from diagnostic severity levels. For example, a cube may have acceptable overall diagnostics while still containing individual observations that fail filtering criteria.
After filtering, the function attempts to rebuild the cube using
b3gbi::process_cube() to ensure cube metadata remains consistent.
If this function is unavailable or fails, the filtered data replaces
data_cube$data directly and the original cube metadata is retained.
In that case a warning is issued.
See also
Other data_exploration:
diagnose_cube()
Examples
# Example cube
# ! Real cubes should be processed with b3gbi::process_cube()
processed_cube <- list(
data = data.frame(
obs = c(5, 2, 10, 1),
year = c(2001, 2001, 2002, 2003),
minCoordinateUncertaintyInMeters = c(50, 2000, NA, 10)
),
resolutions = "10km"
)
class(processed_cube) <- "processed_cube"
# Filter cube based on rule
filtered_cube1 <- filter_cube(
processed_cube,
rules = list(rule_spatial_miss_uncertainty())
)
#> Warning: Filtered data replaced the cube data but metadata was not recomputed.
#> Install and use `b3gbi::process_cube()` to rebuild cube metadata.
# Filter cube based cube diagnostics
diag <- diagnose_cube(
processed_cube,
rules = list(
rule_spatial_miss_uncertainty(),
rule_temporal_missing_years()
)
)
#>
#> Data cube diagnostics
#> ----------------------
#> 🟡 NOTE - spatial_miss_uncertainty
#> Cube contains 1 records with missing coordinate uncertainty.
#>
#> 🟢 OK - temporal_missing_years
#> Cube contains 0 missing years.
#>
filtered_cube2 <- filter_cube(
processed_cube,
diagnostics = diag
)
#> Warning: Filtered data replaced the cube data but metadata was not recomputed.
#> Install and use `b3gbi::process_cube()` to rebuild cube metadata.
# The results are identical
identical(filtered_cube1$data, filtered_cube2$data)
#> [1] TRUE
