The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Getting Started

library(countmaskr)
#> Loading required package: dplyr
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
#> Loading required package: tibble
#> Loading required package: tidyr
library(knitr)

 

Code logic plot

 

One dimensional frequency table

data("countmaskr_data")

aggregate_table <- countmaskr_data %>%
  select(-c(id, age)) %>%
  gather(block, Characteristics) %>%
  group_by(block, Characteristics) %>%
  summarise(N = n()) %>%
  ungroup()

 

Algorithm 1

aggregate_table %>%
  group_by(block) %>%
  mutate(N_masked = mask_counts(N)) %>%
  kable()
block Characteristics N N_masked
age_group 18-29 243 243
age_group 30-39 198 198
age_group 40-49 215 215
age_group 50-64 323 323
age_group 65+ 521 521
ethnicity Hispanic 143 143
ethnicity Non-Hispanic 1346 1,346
ethnicity Other 11 11
gender Female 728 <730
gender Male 763 763
gender Other 9 <11
race American Indian/ Pacific Islander 66 <70
race Asian 215 215
race Black 453 453
race Other 6 <11
race White 760 760

 

Algorithm 2

aggregate_table %>%
  group_by(block) %>%
  mutate(N_masked = mask_counts_2(N)) %>%
  kable()
block Characteristics N N_masked
age_group 18-29 243 243
age_group 30-39 198 198
age_group 40-49 215 215
age_group 50-64 323 323
age_group 65+ 521 521
ethnicity Hispanic 143 143
ethnicity Non-Hispanic 1346 1,346
ethnicity Other 11 11
gender Female 728 728
gender Male 763 >761
gender Other 9 <11
race American Indian/ Pacific Islander 66 66
race Asian 215 215
race Black 453 453
race Other 6 <11
race White 760 >755

 

Algorithm 3

aggregate_table %>%
  group_by(block) %>%
  mutate(N_masked = perturb_counts(N)) %>%
  kable()
block Characteristics N N_masked
age_group 18-29 243 243
age_group 30-39 198 198
age_group 40-49 215 215
age_group 50-64 323 323
age_group 65+ 521 521
ethnicity Hispanic 143 143
ethnicity Non-Hispanic 1346 1,346
ethnicity Other 11 11
gender Female 728 728
gender Male 763 762
gender Other 9 10
race American Indian/ Pacific Islander 66 66
race Asian 215 214
race Black 453 452
race Other 6 10
race White 760 758

 

Using mask_table()

mask_table() is a multi-tasking function which allows for masking, obtaining original and masked percentages on an aggregated table.

 

One-way masking on the original column.

mask_table(aggregate_table, group_by = "block", col_groups = list("N")) %>%
  kable()
block Characteristics N
age_group 18-29 243
age_group 30-39 198
age_group 40-49 215
age_group 50-64 323
age_group 65+ 521
ethnicity Hispanic 143
ethnicity Non-Hispanic 1,346
ethnicity Other 11
gender Female <730
gender Male 763
gender Other <11
race American Indian/ Pacific Islander <70
race Asian 215
race Black 453
race Other <11
race White 760

 

One-way masking while preserving original column and creating new masked columns

Naming convention for the masked columns follow {col}_N_masked pattern.

mask_table(
  aggregate_table,
  group_by = "block",
  col_groups = list("N"),
  overwrite_columns = FALSE
) %>%
  kable()
block Characteristics N N_masked
age_group 18-29 243 243
age_group 30-39 198 198
age_group 40-49 215 215
age_group 50-64 323 323
age_group 65+ 521 521
ethnicity Hispanic 143 143
ethnicity Non-Hispanic 1346 1,346
ethnicity Other 11 11
gender Female 728 <730
gender Male 763 763
gender Other 9 <11
race American Indian/ Pacific Islander 66 <70
race Asian 215 215
race Black 453 453
race Other 6 <11
race White 760 760

 

Owo-way masking with computing original and masked percentages

Naming convention for the original and masked percentages follow {col}_perc and {col}_perc_masked pattern.

mask_table(
  aggregate_table,
  group_by = "block",
  col_groups = list("N"),
  overwrite_columns = TRUE,
  percentages = TRUE
) %>%
  kable()
block Characteristics N N_masked N_perc N_perc_masked
age_group 18-29 243 243 16 % 16 %
age_group 30-39 198 198 13 % 13 %
age_group 40-49 215 215 14 % 14 %
age_group 50-64 323 323 22 % 22 %
age_group 65+ 521 521 35 % 35 %
ethnicity Hispanic 143 143 10 % 10 %
ethnicity Non-Hispanic 1346 1,346 90 % 90 %
ethnicity Other 11 11 1 % 1 %
gender Female 728 <730 49 % <49 %
gender Male 763 763 51 % 51 %
gender Other 9 <11 1 % masked cell
race American Indian/ Pacific Islander 66 <70 4 % <5 %
race Asian 215 215 14 % 14 %
race Black 453 453 30 % 30 %
race Other 6 <11 0 % masked cell
race White 760 760 51 % 51 %

 

Two-way frequency table

two_way_freq_table <- countmaskr_data %>%
  count(race, gender) %>%
  pivot_wider(names_from = gender, values_from = n) %>%
  mutate(
    across(all_of(c("Female", "Male", "Other")), ~ ifelse(is.na(.), 0, .)),
    Overall = Female + Male + Other,
    .after = 1
  )

mask_table(
  two_way_freq_table,
  col_groups = list(c("Overall", "Female", "Male", "Other")),
  overwrite_columns = TRUE,
  percentages = FALSE
) %>%
  kable()
race Overall Female Male Other
American Indian/ Pacific Islander <70 29 <40 0
Asian 215 <100 118 <11
Black 453 <225 228 <11
Other <11 0 <11 0
White 760 379 <375 <11

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.