R DataTable:如何设置列的格式以显示带有逗号的数字以表示数字?

Oma*_*les 1 r shiny dt

在Shiny内部,我正在渲染数据表。

我正在阅读DT软件包的选项,发现要做到这一点,我需要了解Javascript。

https://rstudio.github.io/DT/options.html

m = as.data.frame(matrix(round(rnorm(100, 1e5, 1e6)), 20))
datatable(m, options = list(
  rowCallback = JS(
    "function(row, data) {",
    "var num = '$' + data[3].toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');",
    "$('td:eq(3)', row).html(num);",
    "}")
), callback = JS("table.order([3, 'asc']).draw();"))
Run Code Online (Sandbox Code Playgroud)

我对JS不太了解,所以我问这个问题。我目前最大的数字是:22381,最低的是0。

我想显示:22381作为22,381。如果可能的话:22381,S / .22,381。

这就是我的DataTable现在呈现的方式,我正在使用这些选项来对收入进行排序(降序)。

output$products <- renderDataTable(products_ss(),
                                           options = list(
                                             order = list(list(2, 'desc'))
                                           ))
Run Code Online (Sandbox Code Playgroud)

更新1:如何申请formatCurrency

像这样应用它会产生错误:

您指定了列:itemRevenue,但是数据的列名是

output$productos_sams <- renderDataTable(productos_samsung()  %>% 
                                         formatCurrency(c('itemRevenue'), currency = ' S/.',
                                                        interval = 3, mark = ',', before = FALSE),
                                       options = list(
                                         order = list(list(2, 'desc'))
                                       ))
Run Code Online (Sandbox Code Playgroud)

我已更改您的答案以匹配我的列名。

A. *_*man 5

你在找 DT::formatCurrency

library(DT)
datatable(m) %>% 
             formatCurrency(c('V1', 'V2', 'V3', 'V4', 'V5'), currency = ' S/.',
                            interval = 3, mark = ',', before = FALSE)
Run Code Online (Sandbox Code Playgroud)

更新1:

library(shiny)
library(DT)
#Use DT::dataTableOutput and DT::renderDataTable as shiny also has these functions name
shinyApp(
  ui = fluidPage(fluidRow(column(12, DT::dataTableOutput('tbl')))),
  server = function(input, output) {
    m <- reactive({m <- as.data.frame(matrix(round(rnorm(100, 1e5, 1e6)), 20))})
    output$tbl = DT::renderDataTable(
      datatable(m()) %>% formatCurrency(c('V1', 'V2', 'V3', 'V4', 'V5'), currency = ' S/.',
                                           interval = 3, mark = ',', before = FALSE) 
    )
  }
)
Run Code Online (Sandbox Code Playgroud)

就像https://rstudio.github.io/DT/shiny.html 中一样DT :: renderDT()的第一个参数可以是数据对象,也可以是datatable()返回的表小部件。当您想在使用Shiny呈现窗口小部件之前对其进行操作时,后一种形式可能很有用,例如,您可以将格式化功能应用于表格窗口小部件:。因此,您需要datatable(m())先将其传递到另一步骤。