Home > Software engineering >  Removing 0 before decimal in {gtsummary}
Removing 0 before decimal in {gtsummary}

Time:12-26

In the field of psychology, it is customary to remove a 0 before the decimal when the value above 1.0 is impossible.

Therefore, I'd like to change p values from, for example:

p = 0.01 to p = .01

Additionally, when making a regression table using tbl_regression, I'd like to change standardized beta coefficients to, for example:

beta = -0.43 to beta = -.43 (in the regression table)

Or, R^2:

R^2 = 0.234 to R^2 = .234 (through add_glance_statistics)

Is there a way to do this? I have looked at style tools, but there does not seem to be a configuration for this.

CodePudding user response:

You can use modify_fmt_fun to modify the format of the table. Here, I use trial data from gtsummary to show how you can remove leading 0s for p.value. After applying sub to remove the leading 0, it returns NA for the other rows. So, I use gsub to change the NA back to blanks for the table.

library(gtsummary)
library(tidyverse)

trial[c("age", "grade", "trt")] %>%
  tbl_summary(by = trt) %>%
  add_p() %>%
  modify_fmt_fun(update = p.value ~ function(val) {
    as.character(sub("^(-?)0.", "\\1.", sprintf("%.2f", val))) %>%
      gsub("NA", "", .)
  })

Output

enter image description here

If you need to do the same on others, then you can add in additional parameters. Here, I add in beta (i.e., estimate) to modify_fmt_fun.

lm(age ~ marker   grade, trial) %>%
  tbl_regression() %>%
  add_glance_source_note(
    label = list(df  ~ "Degrees of Freedom", sigma ~ "\U03C3"),
    fmt_fun = df ~ style_number,
    include = c(r.squared, AIC, sigma, df)
  ) %>%
  modify_fmt_fun(update = c(estimate, p.value) ~ function(val) {
    as.character(sub("^(-?)0.", "\\1.", sprintf("%.2f", val))) %>%
      gsub("NA", "", .)
  })

Output

enter image description here

  • Related