Skip to contents

Can you format a column header?

To format your column header, just use markdown syntax within your character strings. Examples of this could be a newline, or bolding certain words. To add a newline to your column header you need to include the markdown syntax <br> or \n in your character string. For bolding, surround your text with ** on either side. Some example code is provided below:

es_data <-tibble(rowlbl1 =c(rep("Completion Status",12),rep("Primary reason for withdrawal",28)),
                 rowlbl2 =c(rep("Completed",4),rep("Prematurely Withdrawn",4),rep("Unknown",4),rep("Adverse Event",4),rep("Lost to follow-up",4),rep("Protocol violation",4),rep("Subject decided to withdraw",4),rep("Protocol Violation",4),rep("Pre-Operative Dose[1]",4),rep("Other",4)),
                 param=c(rep(c("n","n","pct","pct"),10)),
                 column=c(rep(c("Placebo<br>(N=48)","Treatment\n**(N=38)**"),20)), #newline and bold syntax
                 value=c(24,19,2400/48,1900/38,5,1,500/48,100/38,19,18,1900/48,1800/38,1,1,100/48,100/38,0,0,0,0,0,0,0,0,1,1,100/48,100/38,1,4,100/48,400/38,1,0,100/48,0,2,3,200/48,300/38)

)

tfrmt(
  # specify columns in the data
  group = c(rowlbl1),
  label = rowlbl2,
  column = column,
  param = param,
  value = value,
  # set formatting for values
  body_plan = body_plan(
    frmt_structure(
      group_val = ".default",
      label_val = ".default",
      frmt_combine(
        "{n} {pct}",
        n = frmt("xxx"),
        pct = frmt_when("==100" ~ "",
                        "==0" ~ "",
                        TRUE ~ frmt("(xx.x %)"))
      )
    )
  ),
  
  # Specify row group plan
  # Indent the rowlbl2
  row_grp_plan = row_grp_plan(
    row_grp_structure(group_val = ".default", element_block(post_space = " ")),
    label_loc = element_row_grp_loc(location = "indented")
  )
) %>%
  print_to_gt(es_data) %>%
  tab_options(container.width = 1000)
Placebo<br>(N=48) Treatment **(N=38)**
Completion Status

Completed  24 (50.0 %)  19 (50.0 %)
Prematurely Withdrawn   5 (10.4 %)   1 ( 2.6 %)
Unknown  19 (39.6 %)  18 (47.4 %)
   
Primary reason for withdrawal

Adverse Event   1 ( 2.1 %)   1 ( 2.6 %)
Lost to follow-up   0    0 
Protocol violation   0    0 
Subject decided to withdraw   1 ( 2.1 %)   1 ( 2.6 %)
Protocol Violation   1 ( 2.1 %)   4 (10.5 %)
Pre-Operative Dose[1]   1 ( 2.1 %)   0 
Other   2 ( 4.2 %)   3 ( 7.9 %)