在Shiny DataTables中格式化为K(千),M(百万)

时间:2017-10-10 00:18:20

标签: shiny number-formatting dt

我正在寻找一种直接的方法来将数字的格式更改为闪亮的dataTable中的K,M。最好使用 formatCurrency 之类的东西。我不想写k,m函数将数字转换为字符串以进行格式化,因为它很难按值对行进行排序。

2 个答案:

答案 0 :(得分:2)

没有内置的方法可以做到这一点,但是在JavaScript中编写自己的格式函数并不会破坏行排序也不算太糟糕。

请参阅DT文档中的列呈现,了解如何执行此操作:https://rstudio.github.io/DT/options.html

这也有助于: https://datatables.net/reference/option/columns.render

这是一个自定义千位格式化程序的示例,它会舍入到小数点后1位:

library(DT)

formatThousands <- JS(
  "function(data) {",
  "return (data / 1000).toFixed(1) + 'K'",
  "}")

datatable(datasets::rock, rownames = FALSE, options = list(
  columnDefs = list(list(
    targets = 0:1, render = formatThousands
  ))
))

答案 1 :(得分:0)

或者,如果你想要一个非 JavaScript 方法,你可以使用与 reactable 包一起使用的 colFormat 函数。不幸的是,没有自动百万选项,但如果您分割原始数据并使用 colFormat 添加标签,则很容易复制。

Product <- c('Apples','Oranges','Pears')
Revenue <- c(212384903, 23438872, 26443879)
df <- data.frame(Product,Revenue)

df$Revenue_millions <- dfeg$Revenue/1000000

reactable(df,
  showSortable = TRUE,
  columns = list(
  Revenue_millions = colDef(format = colFormat(prefix = "£", separators = TRUE,digits=1,suffix = "m"))))

数据现在应该正确排序