The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
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[@]metanet.ch.
Throughout the examples, we will use the person_record
sample dataset, which is included in the tsg package. This
dataset contains demographic information about individuals, including
person_id, sex, age,
marital_status, employed status, and
functional difficulties.
dim(person_record)
#> [1] 2918 11
head(person_record)
#> person_id age sex marital_status employed seeing hearing walking remembering
#> 1 1 46 1 2 1 1 1 1 1
#> 2 2 44 2 2 1 1 1 1 1
#> 3 3 10 1 1 NA 1 1 1 1
#> 4 4 65 2 2 1 1 1 1 1
#> 5 5 65 1 2 1 1 1 1 1
#> 6 6 28 2 1 2 1 1 1 1
#> self_caring communicating
#> 1 1 1
#> 2 1 1
#> 3 1 1
#> 4 1 1
#> 5 1 1
#> 6 1 1The generate_frequency() function creates frequency
tables for one or more categorical variables in a data frame. It
supports a variety of enhancements, such as sorting, adding totals and
percentages, handling missing values, and customizing labels. This
function is highly versatile and can work with grouped data, outputting
either a single table or a list of tables.
If you pass multiple variables, it will generate frequency tables for each variable separately in a list.
person_record |>
generate_frequency(sex, age, marital_status)
#> $Sex
#> # A tibble: 3 × 3
#> category frequency percent
#> <int+lbl> <int> <dbl>
#> 1 1 [Male] 1516 52.0
#> 2 2 [Female] 1402 48.0
#> 3 0 [Total] 2918 100
#>
#> $Age
#> # A tibble: 96 × 3
#> category frequency percent
#> <chr> <int> <dbl>
#> 1 16 82 2.81
#> 2 15 75 2.57
#> 3 12 74 2.54
#> 4 13 70 2.40
#> 5 20 68 2.33
#> 6 14 66 2.26
#> 7 19 66 2.26
#> 8 11 61 2.09
#> 9 24 61 2.09
#> 10 18 59 2.02
#> # ℹ 86 more rows
#>
#> $`Marital status`
#> # A tibble: 6 × 3
#> category frequency percent
#> <int+lbl> <int> <dbl>
#> 1 1 [Single/never married] 1544 52.9
#> 2 2 [Married] 769 26.4
#> 3 3 [Common law/live-in] 424 14.5
#> 4 4 [Widowed] 138 4.73
#> 5 6 [Separated] 43 1.47
#> 6 0 [Total] 2918 100
#>
#> attr(,"class")
#> [1] "tsg" "tsgf" "list"You can also specify grouping using the group_by() from
dplyr and it will calculate the frequency table for each
group.
person_record |>
dplyr::group_by(sex) |>
generate_frequency(marital_status)
#> # A tibble: 12 × 4
#> sex category frequency percent
#> <int+lbl> <int+lbl> <int> <dbl>
#> 1 1 [Male] 1 [Single/never married] 859 56.7
#> 2 1 [Male] 2 [Married] 387 25.5
#> 3 1 [Male] 3 [Common law/live-in] 211 13.9
#> 4 1 [Male] 4 [Widowed] 40 2.64
#> 5 1 [Male] 6 [Separated] 19 1.25
#> 6 1 [Male] 0 [Total] 1516 100
#> 7 2 [Female] 1 [Single/never married] 685 48.9
#> 8 2 [Female] 2 [Married] 382 27.2
#> 9 2 [Female] 3 [Common law/live-in] 213 15.2
#> 10 2 [Female] 4 [Widowed] 98 6.99
#> 11 2 [Female] 6 [Separated] 24 1.71
#> 12 2 [Female] 0 [Total] 1402 100By default, the function will generate a single frequency table for
the grouped data. If you want to generate a list of frequency tables for
each group, you can set group_as_list = TRUE.
person_record |>
dplyr::group_by(sex) |>
generate_frequency(marital_status, group_as_list = TRUE)
#> $Male
#> # A tibble: 6 × 4
#> sex category frequency percent
#> <int+lbl> <int+lbl> <int> <dbl>
#> 1 1 [Male] 1 [Single/never married] 859 56.7
#> 2 1 [Male] 2 [Married] 387 25.5
#> 3 1 [Male] 3 [Common law/live-in] 211 13.9
#> 4 1 [Male] 4 [Widowed] 40 2.64
#> 5 1 [Male] 6 [Separated] 19 1.25
#> 6 1 [Male] 0 [Total] 1516 100
#>
#> $Female
#> # A tibble: 6 × 4
#> sex category frequency percent
#> <int+lbl> <int+lbl> <int> <dbl>
#> 1 2 [Female] 1 [Single/never married] 685 48.9
#> 2 2 [Female] 2 [Married] 382 27.2
#> 3 2 [Female] 3 [Common law/live-in] 213 15.2
#> 4 2 [Female] 4 [Widowed] 98 6.99
#> 5 2 [Female] 6 [Separated] 24 1.71
#> 6 2 [Female] 0 [Total] 1402 100
#>
#> attr(,"groups")
#> [1] "sex"
#> attr(,"group_attrs")
#> attr(,"group_attrs")$sex
#> attr(,"group_attrs")$sex$labels
#> Male Female
#> 1 2
#>
#> attr(,"group_attrs")$sex$label
#> [1] "Sex"
#>
#> attr(,"group_attrs")$sex$class
#> [1] "haven_labelled" "vctrs_vctr" "integer"
#>
#>
#> attr(,"class")
#> [1] "tsg" "tsgf" "list"By default, the output is sorted by frequency in descending order. If
sort_value is set to FALSE, the output will be
sorted by the variable values in ascending order.
person_record |>
generate_frequency(age, sort_value = TRUE)
#> # A tibble: 96 × 3
#> category frequency percent
#> <chr> <int> <dbl>
#> 1 16 82 2.81
#> 2 15 75 2.57
#> 3 12 74 2.54
#> 4 13 70 2.40
#> 5 20 68 2.33
#> 6 14 66 2.26
#> 7 19 66 2.26
#> 8 11 61 2.09
#> 9 24 61 2.09
#> 10 18 59 2.02
#> # ℹ 86 more rows
person_record |>
generate_frequency(age, sort_value = FALSE)
#> # A tibble: 96 × 3
#> category frequency percent
#> <chr> <int> <dbl>
#> 1 0 32 1.10
#> 2 1 42 1.44
#> 3 2 44 1.51
#> 4 3 41 1.41
#> 5 4 44 1.51
#> 6 5 54 1.85
#> 7 6 44 1.51
#> 8 7 47 1.61
#> 9 8 56 1.92
#> 10 9 48 1.64
#> # ℹ 86 more rowsIf multiple variables are specified, you can indicate which
variable/s is/are excluded from sorting using the
sort_except argument.
person_record |>
generate_frequency(
sex,
age,
marital_status,
# vector of variable names (character) to exclude from sorting
sort_except = "age"
)
#> $Sex
#> # A tibble: 3 × 3
#> category frequency percent
#> <int+lbl> <int> <dbl>
#> 1 1 [Male] 1516 52.0
#> 2 2 [Female] 1402 48.0
#> 3 0 [Total] 2918 100
#>
#> $Age
#> # A tibble: 96 × 3
#> category frequency percent
#> <chr> <int> <dbl>
#> 1 0 32 1.10
#> 2 1 42 1.44
#> 3 2 44 1.51
#> 4 3 41 1.41
#> 5 4 44 1.51
#> 6 5 54 1.85
#> 7 6 44 1.51
#> 8 7 47 1.61
#> 9 8 56 1.92
#> 10 9 48 1.64
#> # ℹ 86 more rows
#>
#> $`Marital status`
#> # A tibble: 6 × 3
#> category frequency percent
#> <int+lbl> <int> <dbl>
#> 1 1 [Single/never married] 1544 52.9
#> 2 2 [Married] 769 26.4
#> 3 3 [Common law/live-in] 424 14.5
#> 4 4 [Widowed] 138 4.73
#> 5 6 [Separated] 43 1.47
#> 6 0 [Total] 2918 100
#>
#> attr(,"class")
#> [1] "tsg" "tsgf" "list"n valuesYou can specify the top n most frequent values to
display in the frequency table, if sort_value is
TRUE. By default, it will show top-n values plus the
remaining values grouped into “Others”.
person_record |>
generate_frequency(
marital_status,
#top_n = 3
)
#> # A tibble: 6 × 3
#> category frequency percent
#> <int+lbl> <int> <dbl>
#> 1 1 [Single/never married] 1544 52.9
#> 2 2 [Married] 769 26.4
#> 3 3 [Common law/live-in] 424 14.5
#> 4 4 [Widowed] 138 4.73
#> 5 6 [Separated] 43 1.47
#> 6 0 [Total] 2918 100If you want to show only the top-n values and exclude the rest, set
top_n_only = TRUE.
person_record |>
generate_frequency(
marital_status,
#top_n = 3,
#top_n_only = TRUE
)
#> # A tibble: 6 × 3
#> category frequency percent
#> <int+lbl> <int> <dbl>
#> 1 1 [Single/never married] 1544 52.9
#> 2 2 [Married] 769 26.4
#> 3 3 [Common law/live-in] 424 14.5
#> 4 4 [Widowed] 138 4.73
#> 5 6 [Separated] 43 1.47
#> 6 0 [Total] 2918 100You can also specify whether to include or exclude NAs
(missing values) from the frequency table.
person_record |>
generate_frequency(
employed,
include_na = TRUE # default
)
#> # A tibble: 4 × 3
#> category frequency percent
#> <int+lbl> <int> <dbl>
#> 1 2 [No] 1186 40.6
#> 2 1 [Yes] 922 31.6
#> 3 9 [Not reported] 810 27.8
#> 4 0 [Total] 2918 100
# Exclude NA values
person_record |>
generate_frequency(
employed,
include_na = FALSE
)
#> # A tibble: 3 × 3
#> category frequency percent
#> <int+lbl> <int> <dbl>
#> 1 2 [No] 1186 56.3
#> 2 1 [Yes] 922 43.7
#> 3 0 [Total] 2108 100If the all variables passed to generate_frequency() are
of the same structure (i.e. have the same number of levels or
categories), you can collapse them into a single frequency table by
setting collapse_list = TRUE.
person_record |>
generate_frequency(
seeing,
hearing,
walking,
remembering,
self_caring,
communicating,
collapse_list = TRUE
)
#> # A tibble: 6 × 13
#> category frequency_0 frequency_1 frequency_2 frequency_3 frequency_4
#> <chr> <int> <int> <int> <int> <int>
#> 1 Seeing, even if w… 2918 2623 82 9 1
#> 2 Hearing, even if … 2918 2666 43 5 1
#> 3 Walking or climbi… 2918 2658 48 7 2
#> 4 Remembering or co… 2918 2680 28 7 0
#> 5 Self-caring (such… 2918 2671 37 5 2
#> 6 Communicating usi… 2918 2683 25 5 2
#> # ℹ 7 more variables: frequency_9 <int>, percent_0 <dbl>, percent_1 <dbl>,
#> # percent_2 <dbl>, percent_3 <dbl>, percent_4 <dbl>, percent_9 <dbl>Or equivalently using the collapse_list() helper
function.
person_record |>
generate_frequency(
seeing,
hearing,
walking,
remembering,
self_caring,
communicating
) |>
collapse_list()
#> # A tibble: 6 × 13
#> category frequency_0 frequency_1 frequency_2 frequency_3 frequency_4
#> <chr> <int> <int> <int> <int> <int>
#> 1 Seeing, even if w… 2918 2623 82 9 1
#> 2 Hearing, even if … 2918 2666 43 5 1
#> 3 Walking or climbi… 2918 2658 48 7 2
#> 4 Remembering or co… 2918 2680 28 7 0
#> 5 Self-caring (such… 2918 2671 37 5 2
#> 6 Communicating usi… 2918 2683 25 5 2
#> # ℹ 7 more variables: frequency_9 <int>, percent_0 <dbl>, percent_1 <dbl>,
#> # percent_2 <dbl>, percent_3 <dbl>, percent_4 <dbl>, percent_9 <dbl>You can also add cumulative frequency and percentage to the frequency table.
person_record |>
generate_frequency(
sex,
add_cumulative = TRUE,
add_cumulative_percent = TRUE
)
#> # A tibble: 3 × 5
#> category frequency percent cumulative cumulative_percent
#> <int+lbl> <int> <dbl> <int> <dbl>
#> 1 1 [Male] 1516 52.0 1516 52.0
#> 2 2 [Female] 1402 48.0 2918 100
#> 3 0 [Total] 2918 100 NA NAYou can also specify whether to express the value as a proportion.
person_record |>
generate_frequency(
marital_status,
as_proportion = TRUE
)
#> # A tibble: 6 × 3
#> category frequency proportion
#> <int+lbl> <int> <dbl>
#> 1 1 [Single/never married] 1544 0.529
#> 2 2 [Married] 769 0.264
#> 3 3 [Common law/live-in] 424 0.145
#> 4 4 [Widowed] 138 0.0473
#> 5 6 [Separated] 43 0.0147
#> 6 0 [Total] 2918 1You can also position the total row at the top of the table.
person_record |>
generate_frequency(
marital_status,
position_total = "top"
)
#> # A tibble: 6 × 3
#> category frequency percent
#> <int+lbl> <int> <dbl>
#> 1 0 [Total] 2918 100
#> 2 1 [Single/never married] 1544 52.9
#> 3 2 [Married] 769 26.4
#> 4 3 [Common law/live-in] 424 14.5
#> 5 4 [Widowed] 138 4.73
#> 6 6 [Separated] 43 1.47NOTE: For labelled data, the value for the row total is automatically
set the lowest numeric value. The default label for the total row is
“Total”; if you want to set a custom label for the total row, you can
use the label_total argument.
The generate_crosstab() function allows you to create
cross-tabulations between two variables, which is useful for exploring
relationships between categorical variables.
person_record |>
generate_crosstab(marital_status, sex)
#> # A tibble: 6 × 6
#> category total frequency_1 frequency_2 percent_1 percent_2
#> <int+lbl> <int> <int> <int> <dbl> <dbl>
#> 1 1 [Single/never married] 1544 859 685 55.6 44.4
#> 2 2 [Married] 769 387 382 50.3 49.7
#> 3 3 [Common law/live-in] 424 211 213 49.8 50.2
#> 4 4 [Widowed] 138 40 98 29.0 71.0
#> 5 6 [Separated] 43 19 24 44.2 55.8
#> 6 0 [Total] 2918 1516 1402 52.0 48.0NOTE: If you pass only one variable, it will fall back to
generate_frequency() and generate a frequency table for
variable specified.
If you pass mutliple variables, it will generate cross-tabulations for each pair of variables separately in a list.
person_record |>
generate_crosstab(
sex,
seeing,
hearing,
walking,
remembering,
self_caring,
communicating
)
#> $`Seeing, even if wearing glasses`
#> # A tibble: 3 × 12
#> category total frequency_1 frequency_2 frequency_3 frequency_4 frequency_NA
#> <int+lbl> <int> <int> <int> <int> <int> <int>
#> 1 1 [Male] 1516 1369 40 4 0 103
#> 2 2 [Female] 1402 1254 42 5 1 100
#> 3 0 [Total] 2918 2623 82 9 1 203
#> # ℹ 5 more variables: percent_1 <dbl>, percent_2 <dbl>, percent_3 <dbl>,
#> # percent_4 <dbl>, percent_NA <dbl>
#>
#> $`Hearing, even if using hearing aid`
#> # A tibble: 3 × 12
#> category total frequency_1 frequency_2 frequency_3 frequency_4 frequency_NA
#> <int+lbl> <int> <int> <int> <int> <int> <int>
#> 1 1 [Male] 1516 1386 23 4 0 103
#> 2 2 [Female] 1402 1280 20 1 1 100
#> 3 0 [Total] 2918 2666 43 5 1 203
#> # ℹ 5 more variables: percent_1 <dbl>, percent_2 <dbl>, percent_3 <dbl>,
#> # percent_4 <dbl>, percent_NA <dbl>
#>
#> $`Walking or climbing steps, even if with cane or artificial leg`
#> # A tibble: 3 × 12
#> category total frequency_1 frequency_2 frequency_3 frequency_4 frequency_NA
#> <int+lbl> <int> <int> <int> <int> <int> <int>
#> 1 1 [Male] 1516 1381 27 4 1 103
#> 2 2 [Female] 1402 1277 21 3 1 100
#> 3 0 [Total] 2918 2658 48 7 2 203
#> # ℹ 5 more variables: percent_1 <dbl>, percent_2 <dbl>, percent_3 <dbl>,
#> # percent_4 <dbl>, percent_NA <dbl>
#>
#> $`Remembering or concentrating`
#> # A tibble: 3 × 10
#> category total frequency_1 frequency_2 frequency_3 frequency_NA percent_1
#> <int+lbl> <int> <int> <int> <int> <int> <dbl>
#> 1 1 [Male] 1516 1393 17 3 103 91.9
#> 2 2 [Female] 1402 1287 11 4 100 91.8
#> 3 0 [Total] 2918 2680 28 7 203 91.8
#> # ℹ 3 more variables: percent_2 <dbl>, percent_3 <dbl>, percent_NA <dbl>
#>
#> $`Self-caring (such as wasking all over or dressing)`
#> # A tibble: 3 × 12
#> category total frequency_1 frequency_2 frequency_3 frequency_4 frequency_NA
#> <int+lbl> <int> <int> <int> <int> <int> <int>
#> 1 1 [Male] 1516 1391 19 2 1 103
#> 2 2 [Female] 1402 1280 18 3 1 100
#> 3 0 [Total] 2918 2671 37 5 2 203
#> # ℹ 5 more variables: percent_1 <dbl>, percent_2 <dbl>, percent_3 <dbl>,
#> # percent_4 <dbl>, percent_NA <dbl>
#>
#> $`Communicating using his/her casual (customary) language`
#> # A tibble: 3 × 12
#> category total frequency_1 frequency_2 frequency_3 frequency_4 frequency_NA
#> <int+lbl> <int> <int> <int> <int> <int> <int>
#> 1 1 [Male] 1516 1396 13 3 1 103
#> 2 2 [Female] 1402 1287 12 2 1 100
#> 3 0 [Total] 2918 2683 25 5 2 203
#> # ℹ 5 more variables: percent_1 <dbl>, percent_2 <dbl>, percent_3 <dbl>,
#> # percent_4 <dbl>, percent_NA <dbl>
#>
#> attr(,"class")
#> [1] "tsg" "tsgc" "list"You can also specify grouping with group_by() from
dplyr and it will calculate the cross-tabulation for each
group.
person_record |>
dplyr::group_by(sex) |>
generate_crosstab(marital_status, employed)
#> # A tibble: 12 × 9
#> sex category total frequency_1 frequency_2 frequency_NA percent_1
#> <int+lbl> <int+lbl> <int> <int> <int> <int> <dbl>
#> 1 1 [Male] 1 [Single/ne… 859 127 330 402 14.8
#> 2 1 [Male] 2 [Married] 387 274 108 5 70.8
#> 3 1 [Male] 3 [Common la… 211 169 41 1 80.1
#> 4 1 [Male] 4 [Widowed] 40 18 21 1 45
#> 5 1 [Male] 6 [Separated] 19 11 8 0 57.9
#> 6 1 [Male] 0 [Total] 1516 599 508 409 39.5
#> 7 2 [Female] 1 [Single/ne… 685 63 234 388 9.20
#> 8 2 [Female] 2 [Married] 382 155 218 9 40.6
#> 9 2 [Female] 3 [Common la… 213 67 142 4 31.5
#> 10 2 [Female] 4 [Widowed] 98 26 72 0 26.5
#> 11 2 [Female] 6 [Separated] 24 12 12 0 50
#> 12 2 [Female] 0 [Total] 1402 323 678 401 23.0
#> # ℹ 2 more variables: percent_2 <dbl>, percent_NA <dbl>If you want to generate a list of cross-tabulations for each group,
you can set group_as_list = TRUE.
person_record |>
dplyr::group_by(sex) |>
generate_crosstab(marital_status, employed, group_as_list = TRUE)
#> $Male
#> # A tibble: 6 × 9
#> sex category total frequency_1 frequency_2 frequency_NA percent_1
#> <int+lbl> <int+lbl> <int> <int> <int> <int> <dbl>
#> 1 1 [Male] 1 [Single/neve… 859 127 330 402 14.8
#> 2 1 [Male] 2 [Married] 387 274 108 5 70.8
#> 3 1 [Male] 3 [Common law/… 211 169 41 1 80.1
#> 4 1 [Male] 4 [Widowed] 40 18 21 1 45
#> 5 1 [Male] 6 [Separated] 19 11 8 0 57.9
#> 6 1 [Male] 0 [Total] 1516 599 508 409 39.5
#> # ℹ 2 more variables: percent_2 <dbl>, percent_NA <dbl>
#>
#> $Female
#> # A tibble: 6 × 9
#> sex category total frequency_1 frequency_2 frequency_NA percent_1
#> <int+lbl> <int+lbl> <int> <int> <int> <int> <dbl>
#> 1 2 [Female] 1 [Single/nev… 685 63 234 388 9.20
#> 2 2 [Female] 2 [Married] 382 155 218 9 40.6
#> 3 2 [Female] 3 [Common law… 213 67 142 4 31.5
#> 4 2 [Female] 4 [Widowed] 98 26 72 0 26.5
#> 5 2 [Female] 6 [Separated] 24 12 12 0 50
#> 6 2 [Female] 0 [Total] 1402 323 678 401 23.0
#> # ℹ 2 more variables: percent_2 <dbl>, percent_NA <dbl>
#>
#> attr(,"groups")
#> [1] "sex"
#> attr(,"class")
#> [1] "tsg" "tsgc" "list"You can specify whether to calculate the percentage or proportion by
row or column using the percent_by_column argument. If it
is set to TRUE, the percentage will be calculated by
column; if set to FALSE, it will be calculated by row. The
default is FALSE.
person_record |>
generate_crosstab(
marital_status,
sex,
percent_by_column = TRUE
)
#> # A tibble: 6 × 7
#> category frequency_total frequency_1 frequency_2 percent_total percent_1
#> <int+lbl> <int> <int> <int> <dbl> <dbl>
#> 1 1 [Single/nev… 1544 859 685 52.9 56.7
#> 2 2 [Married] 769 387 382 26.4 25.5
#> 3 3 [Common law… 424 211 213 14.5 13.9
#> 4 4 [Widowed] 138 40 98 4.73 2.64
#> 5 6 [Separated] 43 19 24 1.47 1.25
#> 6 0 [Total] 2918 1516 1402 100 100
#> # ℹ 1 more variable: percent_2 <dbl>Just like generate_frequency(), you can also specify
whether to express the value as a proportion.
person_record |>
generate_crosstab(
marital_status,
sex,
as_proportion = TRUE
)
#> # A tibble: 6 × 6
#> category total frequency_1 frequency_2 proportion_1 proportion_2
#> <int+lbl> <int> <int> <int> <dbl> <dbl>
#> 1 1 [Single/never marri… 1544 859 685 0.556 0.444
#> 2 2 [Married] 769 387 382 0.503 0.497
#> 3 3 [Common law/live-in] 424 211 213 0.498 0.502
#> 4 4 [Widowed] 138 40 98 0.290 0.710
#> 5 6 [Separated] 43 19 24 0.442 0.558
#> 6 0 [Total] 2918 1516 1402 0.520 0.480You can also position the total row at the top of the table.
person_record |>
generate_crosstab(
marital_status,
sex,
position_total = "top"
)
#> # A tibble: 6 × 6
#> category total frequency_1 frequency_2 percent_1 percent_2
#> <int+lbl> <int> <int> <int> <dbl> <dbl>
#> 1 0 [Total] 2918 1516 1402 52.0 48.0
#> 2 1 [Single/never married] 1544 859 685 55.6 44.4
#> 3 2 [Married] 769 387 382 50.3 49.7
#> 4 3 [Common law/live-in] 424 211 213 49.8 50.2
#> 5 4 [Widowed] 138 40 98 29.0 71.0
#> 6 6 [Separated] 43 19 24 44.2 55.8You can export your frequency table or cross-tabulation to Excel
using the write_xlsx().
You can add a title and subtitle to your table using the
add_table_title() and add_table_subtitle()
functions.
person_record |>
generate_crosstab(marital_status, sex) |>
add_table_title("Marital Status by Sex") |>
add_table_subtitle("Sample dataset: person_record") |>
write_xlsx(path = "table-02.xlsx")You can also add end notes to your table using the
add_source_note() and add_footnote()
functions.
person_record |>
generate_crosstab(marital_status, sex) |>
add_table_title("Marital Status by Sex") |>
add_table_subtitle("Sample dataset: person_record") |>
add_source_note("Source: person_record dataset") |>
add_footnote("This is a footnote for the table") |>
write_xlsx(path = "table-03.xlsx")Alternatively, you can directly add table title, subtitle,
source_note, and footnotes by specifying them in the arguments of the
write_xlsx() function.
You can use the add_facade() function to apply a facade
to your table. A facade is a set of styling options that can be applied
to the table to customize its appearance.
person_record |>
generate_frequency(sex) |>
add_facade(
table.offsetRow = 2,
table.offsetCol = 1
) |>
write_xlsx(
path = "table-04.xlsx",
# Using built-in facade
facade = get_tsg_facade("yolo")
)If you want to further customize the appearance of your table, you
can use the facade argument to specify a YAML facade file.
The facade file contains styling options for the table, such as font
size, border style, background color, and text alignment.
person_record |>
generate_frequency(sex) |>
write_xlsx(
path = "table-05.xlsx",
# Using built-in facade
facade = get_tsg_facade("yolo")
)You can generate a template facade file using the
generate_template() function and then customize it to your
needs.
generate_output() functiongenerate_output() can be used to generate and save the
output file in the specified format (e.g., Excel, HTML, PDF, Word). It
supports various formats and can handle different data structures.
NOTE: At the moment, it only supports Excel output. The other formats are not yet implemented.
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.