像字符一样打印,但在Shiny和DataTable中按数字排序

dav*_*ers 7 sorting r datatables shiny

我想对使用美元格式化的DataTable列进行排序(因此是一个字符).我用于scales::dollar()格式化.这会将字段转换为导致排序问题的字符(例如,"$8" > "$10").

如何将字段排序为数字?或者,我可以将字段保留为数字,只打印美元格式吗?

app.R(需要Shiny 0.10.2)

server <- function(input, output) {
  output$foo_table <- renderDataTable({
    x <- seq(8000, 12000, by = 1000)
    x <- scales::dollar(x)
    d <- data.frame(x, stringsAsFactors = FALSE)
    d
  })
}

ui <- shinyUI(fluidPage(
    mainPanel(dataTableOutput("foo_table"))
  )
)

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

小智 6

有点晚了,但是DT 包现在具有格式功能,包括 formatCurrency:

# format the columns A and C as currency, and D as percentages
datatable(m) %>% formatCurrency(c('A', 'C')) %>% formatPercentage('D', 2)
Run Code Online (Sandbox Code Playgroud)

从功能页面:

在幕后,这些格式化函数只是 rowCallback 选项的包装器,用于生成适当的 JavaScript 代码。同样,有一个 formatDate() 函数可用于格式化日期/时间列。它有一个方法参数,它从可能的转换方法列表中获取值:toDateString、toISOString、toLocaleDateString、toLocaleString、toLocaleTimeString、toString、toTimeString、toUTCString。