Skip to contents

Description

In tfrmt footnotes are a table component which can be added to the specification in a manner similar to body_plan and col_plan. It has its own dedicated function called footnote_plan which consists of a list of footnote_structures.

Some options for the marks used to indicate footnotes are the following:
  • letters (letters: a, b, c, etc.)
  • numbers (numbers: 1, 2, 3, etc.)
  • standard (set of 4 distinct symbols)
  • extended (set of 6 distinct symbols)

Examples

Let’s go through some examples!

Here is some mock data we’re going to use.

# Create mock data
df <- crossing(group = c("group 1", "group 2"),
               label = c("label 1", "label 2"),
               column = c("PL", "T1", "T2", "T1&T2"),
               param = c("count", "percent"))

# This one is used for examples 5 and 6
span_df <- df %>% mutate(span = case_when(column == "PL" ~ "Placebo",
                                          column %in% c("T1", "T2", "T1&T2") == TRUE ~ "Treatment"))

Example 1 (one footnote per group/column)

Different footnotes are separated by individual footnote_structures.

# Create specification
tfrmt(
  group = group,
  label = label,
  column = column,
  param = param,
  row_grp_plan = row_grp_plan(
    row_grp_structure(group_val = ".default",
                      element_block(post_space = "   ")) ),
  
  body_plan = body_plan(
    frmt_structure(group_val = ".default", label_val = ".default",
                   frmt_combine("{count} ({percent})",
                                count = frmt("xx"),
                                percent = frmt("xx.x")))
  ),
  
  # Add footnotes here
  footnote_plan = footnote_plan(
    footnote_structure(footnote_text = "Source Note", group_val = "group 1"),
    footnote_structure(footnote_text = "Placebo", column_val = "PL"),
    marks = "standard"),
  
  ) %>%
  print_mock_gt(df)
#> Message: `tfrmt` will need `value` value to `print_to_gt` when data is avaliable
PL* T1 T1&T2 T2
group 1



label 1 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
label 2 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
group 2



label 1 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
label 2 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
* Placebo
Source Note

Example 2 (same footnote for multiple columns)

When applying a footnote to multiple columns you must enter a named list where the LHS is the name of the column variable in your input data (“column” in this example) containing column header names for the output table, and the RHS is the column header name you have selected (“T1”, “T2” or “T1&T2” in this case).

# Create specification
tfrmt(
  group = group,
  label = label,
  column = column,
  param = param,
  row_grp_plan = row_grp_plan(
    row_grp_structure(group_val = ".default",
                      element_block(post_space = "   ")) ),
  
  body_plan = body_plan(
    frmt_structure(group_val = ".default", label_val = ".default",
                   frmt_combine("{count} ({percent})",
                                count = frmt("xx"),
                                percent = frmt("xx.x")))
  ),
  
  # Add footnotes here
  footnote_plan = footnote_plan(
    footnote_structure(footnote_text = "All Treatments", list(column = c("T1","T2", "T1&T2"))),
    marks = "numbers"),
  
) %>%
  print_mock_gt(df)
#> Message: `tfrmt` will need `value` value to `print_to_gt` when data is avaliable
PL T11 T1&T21 T21
group 1



label 1 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
label 2 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
group 2



label 1 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
label 2 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
1 All Treatments

Example 3 (footnote for same label in all groups)

# Create specification
tfrmt(
  group = group,
  label = label,
  column = column,
  param = param,
  row_grp_plan = row_grp_plan(
    row_grp_structure(group_val = ".default",
                      element_block(post_space = "   ")) ),
  
  body_plan = body_plan(
    frmt_structure(group_val = ".default", label_val = ".default",
                   frmt_combine("{count} ({percent})",
                                count = frmt("xx"),
                                percent = frmt("xx.x")))
  ),
  
  # Add footnotes here
  footnote_plan = footnote_plan(
    footnote_structure(footnote_text = "Footnote goes here", label_val = "label 1"),
    marks = "standard"),
  
) %>%
  print_mock_gt(df)
#> Message: `tfrmt` will need `value` value to `print_to_gt` when data is avaliable
PL T1 T1&T2 T2
group 1



label 1* xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
label 2 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
group 2



label 1* xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
label 2 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
* Footnote goes here

Example 4 (footnote for specific label in one group)

# Create specification
tfrmt(
  group = group,
  label = label,
  column = column,
  param = param,
  row_grp_plan = row_grp_plan(
    row_grp_structure(group_val = ".default",
                      element_block(post_space = "   ")) ),
  
  body_plan = body_plan(
    frmt_structure(group_val = ".default", label_val = ".default",
                   frmt_combine("{count} ({percent})",
                                count = frmt("xx"),
                                percent = frmt("xx.x")))
  ),
  
  # Add footnotes here
  footnote_plan = footnote_plan(
    footnote_structure(footnote_text = "Footnote goes here", group_val = "group 1", label_val = "label 1"),
    marks = "standard"),
  
) %>%
  print_mock_gt(df)
#> Message: `tfrmt` will need `value` value to `print_to_gt` when data is avaliable
PL T1 T1&T2 T2
group 1



label 1* xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
label 2 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
group 2



label 1 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
label 2 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
* Footnote goes here

Example 5 (footnote for spanning header)

# Add specification
tfrmt(
  group = group,
  label = label,
  column = c("span", "column"),
  param = param,
  row_grp_plan = row_grp_plan(
    row_grp_structure(group_val = ".default",
                      element_block(post_space = "   ")) ),
  body_plan = body_plan(
    frmt_structure(group_val = ".default", label_val = ".default",
                   frmt_combine("{count} ({percent})",
                                count = frmt("xx"),
                                percent = frmt("xx.x")))
  ),
  col_plan = col_plan(
    group, label,
    span_structure(span = c("Placebo"),
                   column = c("PL")),
    span_structure(span = c("Treatment"),
                   column = c("T1", "T2", "T1&T2"))
  ),
  
  # Add footnote here
  footnote_plan = footnote_plan(
    footnote_structure(footnote_text = "Footnote goes here", column_val = list(span = "Treatment")),
    marks = "extended"
  )
) %>%
  print_mock_gt(span_df)
#> Message: `tfrmt` will need `value` value to `print_to_gt` when data is avaliable
Placebo Treatment*
PL T1 T2 T1&T2
group 1



label 1 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
label 2 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
group 2



label 1 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
label 2 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
* Footnote goes here

Example 6 (footnote for column header/s under spanning header)

You can apply a mark to multiple headers by entering a named list for your column variable.

# Add specification
tfrmt(
  group = group,
  label = label,
  column = c("span", "column"),
  param = param,
  row_grp_plan = row_grp_plan(
    row_grp_structure(group_val = ".default",
                      element_block(post_space = "   ")) ),
  body_plan = body_plan(
    frmt_structure(group_val = ".default", label_val = ".default",
                   frmt_combine("{count} ({percent})",
                                count = frmt("xx"),
                                percent = frmt("xx.x")))
  ),
  col_plan = col_plan(
    group, label,
    span_structure(span = c("Placebo"),
                   column = c("PL")),
    span_structure(span = c("Treatment"),
                   column = c("T1", "T2", "T1&T2"))
  ),
  
  # Add footnote here
  footnote_plan = footnote_plan(
    footnote_structure(footnote_text = "Footnote goes here", column_val = list(span = "Treatment", column = "T1&T2")),
    marks = "extended"
  )
) %>%
  print_mock_gt(span_df)
#> Message: `tfrmt` will need `value` value to `print_to_gt` when data is avaliable
Placebo Treatment
PL T1 T2 T1&T2*
group 1



label 1 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
label 2 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
group 2



label 1 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
label 2 xx (xx.x) xx (xx.x) xx (xx.x) xx (xx.x)
* Footnote goes here