Problem:
I want to format big numbers in a categorical tbl_summary to simplify zeros.
Reprex:
data<-
  data.frame(variable1 = rep(1:4, each = 10000)) %>%
  mutate(
    variable1 =
      case_when(
        variable1 %in% 1 ~ "Dog",
        variable1 %in% 2 ~ "Cat",
        variable1 %in% 3 ~ "Lion",
        variable1 %in% 4 ~ "Tiger"
      )
  )
data %>% 
  tbl_summary()
Output:
| Characteristic | N = 40,000 | 
|---|---|
| variable1 | |
| Cat | 10,000 (25%) | 
| Dog | 10,000 (25%) | 
| Lion | 10,000 (25%) | 
| Tiger | 10,000 (25%) | 
Desired output:
| Characteristic | N = 40 | 
|---|---|
| variable1 | Results in thousands | 
| Cat | 10 (25%) | 
| Dog | 10 (25%) | 
| Lion | 10 (25%) | 
| Tiger | 10 (25%) | 
Attempts:
As you can see, is a frequency table but with the big numbers smplified by thousands. I was trying to achieve my desired output with functions inside gtsummary like style_number but i keep recieving the error: Error in .x * scale : non-numeric argument to binary operator. The answer could also be in the r package scales (function: label_number).
Let me know if you have some insights. Thanks.
In the digits= argument you can pass both integers AND styling functions. In the example below, I wrote a new function that scales large numbers to the nearest thousand.
Example!
library(gtsummary)
packageVersion("gtsummary")
#> [1] '1.6.0'
style_number_10K <- function(x) paste0(style_number(x, scale = 0.001), "K")
style_number_10K(10002)
#> [1] "10K"
data <-
  data.frame(variable1 = rep(1:4, each = 10000)) %>%
  mutate(
    variable1 =
      dplyr::case_when(
        variable1 %in% 1 ~ "Dog",
        variable1 %in% 2 ~ "Cat",
        variable1 %in% 3 ~ "Lion",
        variable1 %in% 4 ~ "Tiger"
      )
  )
tbl <-
  data %>% 
  tbl_summary(
    digits = all_categorical() ~ list(style_number_10K, 0)
  )
 Created on 2022-06-15 by the reprex package (v2.0.1)
Created on 2022-06-15 by the reprex package (v2.0.1)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With