在R formattable中组合color_bar(...)和percent(...)

时间:2019-07-30 15:33:18

标签: r formattable

我正在尝试创建一个color_bar,其中的条基于行值的子集的百分比,即a1 =(a1 + b1)/ 2。但是,我也希望将数字格式化为百分比。

我曾尝试使用Google搜索,但是找不到其他遇到类似问题的人。我怀疑可能会有更好的方法来实现此目的,但更容易,但我无法弄清楚。

tempDf = data.frame(a=c(0.8,0.5), b=c(0.2,0.5),c=c(500,500)) # dummy data
formattable(tempDf,unlist(list(
  lapply(as.list(1:nrow(tempDf)), function(row) {
    list(
      area(row, 1:2) ~ color_bar('green', function(row) row/sum(row)), # creates the green bars which are based on the percentage a1=(a1+b1)/2
      area(row, 1:1) ~ function(x) percent(x, digits = 1) # formats the a row as percent *this overwrites the color bars*
      )
  })
)))

预期的输出是,绿色条在A列中以百分比显示。目前,百分比代码会覆盖条形图。

1 个答案:

答案 0 :(得分:1)

我使用tidyverse进行了此操作,但是它就像一个符咒。实际上有两个部分,具体取决于您的需求:

格式化百分比

这是假设您已经有一个已在0到1之间编码的变量。我们称之为pct_var

tempDf %>%
    mutate(pct_var = color_bar(colour_to_use)(formattable::percent(pct_var))

在0和1之间缩放条形

此解决方案来自DisplayR blog post,要求您编写一个非常简单的函数(在其他情况下可能不是一个非常有用的函数)。

perc_scale = function(x) (x/1)

tempDf %>%
    mutate(pct_var = color_bar(colour_to_use, fun = perc_scale)(formattable::percent(pct_var))

有,希望对某人有用。