R Formattable将两种格式应用于一个区域

Gui*_*azé 1 r formattable

我正在尝试使用formattable很棒的包,并获得一个表格,该表格具有在多个列上缩放的百分比和颜色。

这是代码

set.seed(123)
df <- data.frame(id = 1:10, 
                 a = rnorm(10), b = rnorm(10), c = rnorm(10))

df$a <- percent(df$a)
df$b <- percent(df$b)
df$c <- percent(df$c)


table_with_percent_but_color_not_scaled <- formattable(df, list(a = color_tile("transparent", "pink")
                     , b= color_tile("transparent", "pink")
                     , c= color_tile("transparent", "pink")))

table_with_color_scaled_but_not_percent <- formattable(df, list(area(col = 2:4)  ~  color_tile("transparent","pink")))
Run Code Online (Sandbox Code Playgroud)

问题是table_with_color_scaled_but_not_percent不要保留百分比格式:

在此处输入图片说明

并且table_with_percent_but_color_not_scaled不要保持相同的比例为颜色上色:

在此处输入图片说明

理想情况下,我想使用该area功能,因为我的df列数和名称将在最终代码中更改。任何的想法 ?谢谢!

小智 5

不久前,我遇到了同样的问题,不得不创建自己的格式化程序。这是带有用于创建与您的表类似的代码的格式化程序。只需调整样式内的标签即可。

library(tidyverse)
library(formattable)

colorbar <- function(color = "lightgray", fun = "comma", digits = 0) {
  fun <- match.fun(fun)
  formatter("span", x ~ fun(x, digits = digits),
            style = function(y) style(
              display = "inline-block",
              direction = "rtl",
              "border-radius" = "4px",
              "padding-right" = "2px",
              "background-color" = csscolor(color),
              width = percent(proportion(as.numeric(y), na.rm = TRUE))
            )
  )
}

set.seed(123)
df <- data.frame(id = as.factor(1:10), 
                 a = rnorm(10), b = rnorm(10), c = rnorm(10)) %>%
  mutate_if(is.numeric, percent)

tbl <- df %>%
  formattable(list(area(col = 2:4) ~ colorbar(color = "pink", fun = "percent", digits = 2))) %>%
  as.htmlwidget()
Run Code Online (Sandbox Code Playgroud)

如果您有任何疑问,请告诉我!