I want to display the large numbers in scientific format and keep the regular format for the small numbers to reduce column width. The real data have more columns than what is shown here.
dput(A)
structure(list(st2_1 = c(1437.21, 1019.03, 1199.3, 850.35, 67.32,
586.62), st1_2 = c(0.12, 0.08, 855.64, 606.68, 687.06, 5987.41
), st2_2 = c(0.11, 0.08, 837.72, 593.98, 3659.78, 31893.5), `1-sum(e)` = c(1522.79,
1075.11, 2092.52, 1513.48, 1052.3, 9066.99), sss_1 = c(0.05,
0.03, 0.99, 0.7, 0.03, 0.29), sss_2 = c(0.02, 0.02, 0.43, 0.3,
0.02, 0.19), f_1 = c(4099185668.8, 2766736655.89, 2093885714.17,
1228712929.01, 5592860407.22, 560845021.29), f_2 = c(990125323.33,
668282982.85, 14238156533.71, 8355091636.51, 10241029160.69,
1026957549.35), f_3 = c(237420871.69, 160246712.8, 711346410.36,
417425137.15, 6553794288.93, 657206264.75)), row.names = c(NA,
6L), class = "data.frame")
The code below, provided at Flextable format column to scientific notation, doesn’t work for me.
A %>%
flextable::flextable() %>%
set_formatter(numbers = function(x) {
formatC(x, format = "e", digits = 2)
})
>Solution :
The issue is that there is no column called numbers in your data. According to the docs (?set_formatter) you could pass
Name-value pairs of functions, names should be existing col_key values
to specify the format for columns by name. Hence, to format your large numbers you could do:
library(flextable)
format_scientific <- function(x) {
formatC(x, format = "e", digits = 2)
}
A |>
flextable() |>
set_formatter(
f_1 = format_scientific,
f_2 = format_scientific,
f_3 = format_scientific
)
