【问题标题】:DT in Shiny and R: Custom number formattingShiny 和 R 中的 DT:自定义数字格式
【发布时间】:2016-01-15 06:05:31
【问题描述】:

我有一个使用 DT-package 显示数据表的闪亮应用程序。我想要的是能够以自定义方式格式化列。例如,我希望货币值显示如下:1,234.50€ 而不是 DT-way,它显示为 $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”这样的另一个字符时,该字符仍然显示在开头而不是结尾。此外,数值不会得到“大标记”。

有什么想法吗?

【问题讨论】:

  • 对于数字,您可以尝试:formatCurrency('num', currency = "", interval = 3, mark = ",", digits = 0)。对于欧元,formatCurrency(c('cur'), currency = "€", interval = 3, mark = ",", digits = 1)。不过我不知道怎么把它放在右边
  • formatCurrency-获得 1,000 的方法很好!但是,我仍然没有看到货币编号的欧元符号。如果我按照?formatCurrency 中的建议使用\U20AC 而不是,则同样适用

标签: r shiny dt


【解决方案1】:

您可以更改数据表包中 .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)

对我有用,这就是你尝试过的,但你没有看到任何符号?

【讨论】:

  • 有趣的方法。如果我想获得相同的结果,我必须将库方向复制到其他机器吗?
  • 是的,您必须将该库链接到每台机器,当然只能在服务器上运行该库。此外,在每次 DT 包更新后,您都必须调整代码。所以这有点花哨,你可以在github.com/rstudio/DT 上向开发团队建议这个,以便在 r 代码中实现一个选项来排列货币符号,因为这很容易调整,它可能会在下一次更新中被采纳。
  • 关于后一种解决方案:当我输入shinyApp(ui = fluidPage(DT::dataTableOutput('tbl')), server = function(input, output) {dat &lt;- data.frame(cur = 1234.5) output$tbl = DT::renderDataTable( datatable(dat) %&gt;% formatCurrency(c('cur'), currency = "\U20AC", interval = 3, mark = ",", digits = 2) ) } ) 时,我收到一个错误,digits 是一个未使用的参数...没有digits 参数我仍然看不到货币象征。 See Here
  • 嗯,这有点奇怪,你的代码在我的 windows 机器和 ubuntu 服务器上运行良好。我的包版本是 dplyr_0.4.2 DT_0.1.34 shiny_0.12.2 和 R 版本 3.2.2,也许你必须更新你的包? (使用 sessionInfo() 检查您加载的版本)
  • 仍然没有€符号。我怀疑它与我的机器而不是 R 代码有关...无论如何谢谢!
猜你喜欢
  • 2021-12-13
  • 2020-10-28
  • 2018-02-06
  • 2020-05-02
  • 2021-11-15
  • 2021-07-30
  • 2018-04-13
  • 2019-04-21
  • 1970-01-01
相关资源
最近更新 更多