【发布时间】:2017-10-10 00:18:19
【问题描述】:
我正在寻找一种直接的方法来将数字格式更改为闪亮数据表中的 K、M。最好使用 formatCurrency 之类的东西。我不想编写 k,m 函数将数字转换为字符串以进行格式化,因为它很难按值对行进行排序。
【问题讨论】:
标签: r shiny number-formatting dt
我正在寻找一种直接的方法来将数字格式更改为闪亮数据表中的 K、M。最好使用 formatCurrency 之类的东西。我不想编写 k,m 函数将数字转换为字符串以进行格式化,因为它很难按值对行进行排序。
【问题讨论】:
标签: r shiny number-formatting dt
没有内置的方法可以做到这一点,但是用 JavaScript 编写自己的格式函数并不会破坏行排序也不错。
请参阅 DT 文档中的 Column Rendering 了解如何执行此操作: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
))
))
【讨论】:
或者,如果你想要一个非 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"))))
数据现在应该正确排序
【讨论】: