在 R 的 flextable 包中将数字列格式化为百分比

Jac*_*ski 5 r flextable officer

例如我正在使用虹膜数据:

library(flextable)
library(officer)
library(magrittr)

ft_test <- head(iris) %>% flextable() %>% 
  colformat_num(j = c("Sepal.Length", "Sepal.Width",
                             "Petal.Length", "Petal.Width"), digits = 1)
Run Code Online (Sandbox Code Playgroud)

如果我希望有百分比格式的“Petal.Width”值,正确的语法是什么?我找不到 colformat_percent 函数。有没有办法使用flextable语法来弥补它?

Sir*_*ius 10

set_formatter按照手册中所述使用虹膜数据(!)


ft_test <- head(iris) %>% flextable() %>% 
  set_formatter( Petal.Width = function(x) sprintf( "%.1f%%", x*100 ) )

Run Code Online (Sandbox Code Playgroud)

这是手册中的示例部分:


Examples:

     ft <- flextable( head( iris ) )
     ft <- set_formatter( x = ft,
             Sepal.Length = function(x) sprintf("%.02f", x),
             Sepal.Width = function(x) sprintf("%.04f", x)
           )
     ft <- theme_vanilla( ft )
     ft
     

Run Code Online (Sandbox Code Playgroud)


Mic*_*hao 2

似乎有一个官方函数fmt_pct

ft_test <- head(iris) %>% flextable() %>% mk_par(
  j = "Sepal.Length",
  value = as_paragraph(as_chunk(Sepal.Length, formatter = fmt_pct)))
Run Code Online (Sandbox Code Playgroud)

或者,您可以在将单元格转换为弹性表之前将其格式化为字符:

percent <- function(x, digits = 2, format = "f", ...) {    
  paste0(formatC(x * 100, format = format, digits = digits, ...), "%")
}

ft_test <- head(iris) %>% 
  mutate(across(where(is.numeric), ~percent(.x))) %>%
  flextable() 

Run Code Online (Sandbox Code Playgroud)