Apply Groups of Filter Criteria from Configuration
Usage
apply_filters(data, groups, length_column = NULL, id_columns = names(data)[1L])
Arguments
- data
data frame
- groups
names of filter criteria groups defined in list returned by
kwb.prep:::read_filter_criteria
- length_column
name of column in
data
containing lengths (to be summed up for the overview that is returned)- id_columns
names of column(s) in
data
that uniquely identify the records. This column / these columns are returned in order to report about the records that have been removed
Value
data, filtered according to the specified criteria. The returned data
frame has an attribute filter_info
being a list with as many
elements as there are groups
. The elements are named according to
the values given in groups
. Each list element is a list with one
element overview
(being a data frame with one row per filter
criterion) and further elements removed_<i>
being data frames with
only id_columns
that represent the records that have been removed in
the according filter step i
.
Examples
# Define filter criteria
criteria <- list(
sepal = c(
"sepal short" = "Sepal.Length < 5",
"sepal narrow" = "Sepal.Width < 3"
),
petal = c(
"petal short" = "Petal.Length < 5",
"petal narrow" = "Petal.Width < 3"
)
)
# Write criteria to temporary yaml file
tdir <- tempdir()
yaml::write_yaml(criteria, file.path(tdir, "filter_criteria.yml"))
# Set path to temporary "config" folder so that kwb.prep knows about it
kwb.prep:::set_user_config_dir(tdir)
# Apply filter groups "sepal" and "petal" to the iris dataset
result <- apply_filters(iris, c("sepal", "petal"))
#> ## Filterschritte 'sepal' anwenden auf 'sepal'
#>
#> ## Filterschritte 'sepal' anwenden auf 'sepal'
#>
#> ```{r eval = FALSE}
#> Evaluating Sepal.Length < 5 ...
#> is TRUE for 22 rows ( 14.7 %),
#> FALSE for 128 rows ( 85.3 %) and
#> NA for 0 rows ( 0.0 %).
#> Selected rows now: 22
#> Evaluating Sepal.Width < 3 ...
#> is TRUE for 57 rows ( 38.0 %),
#> FALSE for 93 rows ( 62.0 %) and
#> NA for 0 rows ( 0.0 %).
#> Selected rows now: 4
#> ```
#>
#> Eine Uebersicht ueber die entfernten Haltungen und deren Laengen kann nicht erzeugt werden, da
#>
#> - keine Laengenangaben uebergeben wurden
#>
#> ## Filterschritte 'petal' anwenden auf 'petal'
#>
#> ## Filterschritte 'petal' anwenden auf 'petal'
#>
#> ```{r eval = FALSE}
#> Evaluating Petal.Length < 5 ...
#> is TRUE for 4 rows (100.0 %),
#> FALSE for 0 rows ( 0.0 %) and
#> NA for 0 rows ( 0.0 %).
#> Selected rows now: 4
#> Evaluating Petal.Width < 3 ...
#> is TRUE for 4 rows (100.0 %),
#> FALSE for 0 rows ( 0.0 %) and
#> NA for 0 rows ( 0.0 %).
#> Selected rows now: 4
#> ```
#>
#> Eine Uebersicht ueber die entfernten Haltungen und deren Laengen kann nicht erzeugt werden, da
#>
#> - keine Laengenangaben uebergeben wurden
#>
# Have a look at the result
str(result)
#> 'data.frame': 4 obs. of 5 variables:
#> $ Sepal.Length: num 4.4 4.5 4.9 4.9
#> $ Sepal.Width : num 2.9 2.3 2.4 2.5
#> $ Petal.Length: num 1.4 1.3 3.3 4.5
#> $ Petal.Width : num 0.2 0.3 1 1.7
#> $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 2 3
#> - attr(*, "filter_info")=List of 2
#> ..$ sepal:List of 3
#> .. ..$ overview :'data.frame': 2 obs. of 5 variables:
#> .. .. ..$ CleaningStep : chr [1:2] "Keep 'Sepal.Length < 5'" "Keep 'Sepal.Width < 3'"
#> .. .. ..$ Count.go : int [1:2] 128 93
#> .. .. ..$ Percentage.go : num [1:2] 85.3 62
#> .. .. ..$ Count.keep : int [1:2] 22 4
#> .. .. ..$ Percentage.keep: num [1:2] 14.67 2.67
#> .. ..$ removed_1:'data.frame': 128 obs. of 1 variable:
#> .. .. ..$ Sepal.Length: num [1:128] 5.1 5 5.4 5 5.4 5.8 5.7 5.4 5.1 5.7 ...
#> .. ..$ removed_2:'data.frame': 93 obs. of 1 variable:
#> .. .. ..$ Sepal.Length: num [1:93] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.9 5.4 ...
#> ..$ petal:List of 3
#> .. ..$ overview :'data.frame': 2 obs. of 5 variables:
#> .. .. ..$ CleaningStep : chr [1:2] "Keep 'Petal.Length < 5'" "Keep 'Petal.Width < 3'"
#> .. .. ..$ Count.go : int [1:2] 0 0
#> .. .. ..$ Percentage.go : int [1:2] 0 0
#> .. .. ..$ Count.keep : int [1:2] 4 4
#> .. .. ..$ Percentage.keep: num [1:2] 100 100
#> .. ..$ removed_1:'data.frame': 0 obs. of 1 variable:
#> .. .. ..$ Sepal.Length: num(0)
#> .. ..$ removed_2:'data.frame': 0 obs. of 1 variable:
#> .. .. ..$ Sepal.Length: num(0)