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

4
例如,我正在使用鸢尾花数据:
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)

如果我希望将“Petal.Width”值以百分比格式显示,正确的语法是什么?我找不到colformat_percent函数。是否有一种方法可以使用flextable语法弥补它?
2个回答

9

按照手册中的说明,使用iris数据,使用set_formatter函数。


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


以下是来自手册的示例部分:manual

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
     


2
似乎有一个官方功能fmt_pct
ft_test <- head(iris) %>% flextable() %>% mk_par(
  j = "Sepal.Length",
  value = as_paragraph(as_chunk(Sepal.Length, formatter = fmt_pct)))

或者,您可以在将其转换为flextable之前将单元格格式化为字符:
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() 


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接