在Shiny和R中的DT:自定义数字格式化

12

我有一个使用“DT”软件包展示数据表的 shiny 应用程序。 我希望能够以自定义方式格式化列。 例如,我希望货币值显示为这样:1,234.50€而不是“DT”方式,它像这样显示:$1,234.5(注意符号、货币符号位置以及小数点后面的数字的变化)。

以下是 MWE 示例:

library(shiny)
library(DT)

shinyApp(
  # UI
  ui = fluidPage(DT::dataTableOutput('tbl')),

  # SERVER
  server = function(input, output) {
    dat <- data.frame(cur = 1234.5, # supposed to be displayed as: 1,234.50€ | Bad! 
                                         # displayed as $1,234.5
                      perc = 0.123456, # 12.34% | Good!
                      num = 1000) # 1,000 | Bad! displayed as 1000

    # render DT
    output$tbl = DT::renderDataTable(
      datatable(dat) %>%
        formatCurrency(c('cur'), "$") %>%
        formatPercentage('perc', 2) %>%
        formatRound('num', digits = 0)
    )
  }
)

它的表现还算不错,但是当将货币符号更改为 时,符号会消失。插入另一个字符(如"E")时,该字符仍然显示在开头而不是结尾。此外,数值没有得到“big-mark”的标记。

有任何想法吗?


4
对于数字,您可以尝试使用以下代码:formatCurrency('num', currency = "", interval = 3, mark = ",", digits = 0)。对于欧元,使用此代码:formatCurrency(c('cur'), currency = "€", interval = 3, mark = ",", digits = 1)。我不确定如何将其放置在正确的位置上。 - Chris
使用 formatCurrency 方法得到 1,000 是不错的选择! 然而,我仍然没有看到货币数字的 € 符号。如果我像 ?formatCurrency 中建议的那样使用 \U20AC 而不是 ,情况也是一样的。 - David
1个回答

2

您可以从datatable包的.js文件中更改货币符号的位置。

编辑DTWidget.formatCurrency函数的行。

 $(thiz.api().cell(row, col).node()).html(currency + markInterval(d, interval, mark));

简单地说

 $(thiz.api().cell(row, col).node()).html(markInterval(d, interval, mark) + currency);

在您的R库目录中的DT/htmlwidgets/datatables.js文件中。

至于€符号,

formatCurrency(c('cur'), currency = "\U20AC", interval = 3, mark = ",", digits = 2)

对我有用,这就是你所尝试的,你看不到任何符号吗?


1
是的,您需要将该库链接到每台机器上,当然只在服务器上运行该库。此外,在每次DT软件包更新后,您都需要调整代码。所以这有点小聪明,您可以建议开发团队在https://github.com/rstudio/DT上实现一种选项,以安排货币符号,因为这很容易调整,可能会在下一个更新中得到采纳。 - Sebastian
1
关于后一种解决方案: 当我输入 shinyApp(ui = fluidPage(DT::dataTableOutput('tbl')), server = function(input, output) {dat <- data.frame(cur = 1234.5) output$tbl = DT::renderDataTable( datatable(dat) %>% formatCurrency(c('cur'), currency = "\U20AC", interval = 3, mark = ",", digits = 2) ) } )时,我会收到一个错误提示,即 digits 是未使用的参数... 没有 digits 参数,我仍然看不到货币符号。请参见此处 - David
我在Windows 7 SP1 64位上使用R版本3.2.2,DT_0.1(最新的CRAN发布版),shiny 0.12.2和RStudio 0.99.482。系统语言是德语,因此UTF-8应该可以正常工作,特别是€符号。 - David
嗯,也许可以尝试使用DT的开发版本:devtools::install_github('rstudio/DT')。 - Sebastian
1
仍然没有€符号。我怀疑这与我的机器有关,而不是R代码...无论如何,谢谢! - David
显示剩余2条评论

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