【问题标题】:R Shiny DataTables: Format numbers not by column but by rowR Shiny DataTables:不是按列而是按行格式化数字
【发布时间】:2016-02-28 05:55:56
【问题描述】:

我的数据是这样的矩阵:

             Buy and Hold              Strategy
[1,]    1.0000000000000000   19.0000000000000000
[2,]   -0.6300786023496699   -0.2361973739022651
[3,]   -0.0872213557701079   -0.0244237977843418
[4,]   -0.3461103323781194   -0.1010012410191289
[5,]    0.0000000000000000    0.4949083503054990
[6,]    0.2520044841505053    0.2418168087629348
[7,]   -0.7946470924762163   -0.7731378277502762
[8,] 1864.0000000000000000 1707.0000000000000000

如您所见,我需要按行而不是按列进行格式化。例如 [1,] 应该没有小数,所以有一个 1 和一个 19。但是 Rows [2,]-Row[7,] 应该是一个百分比,如 xx.x% 和 Row[8,] 又是一个数字没有小数。我怎样才能做到这一点?我不知道如何使用这些回调函数,我认为有解决方案..

【问题讨论】:

  • % 或不带小数的标准是什么,例如第 5 行的0.000000000,第一列是0% 还是0?还是说如果两列都没有小数,就不是百分比?
  • 除了第 1 行和第 8 行是没有小数且没有百分比的普通数字外,基本上所有内容都是百分比
  • 是的 0.0000000000 是一个普通数字或百分比(第 5 行第一列)
  • 啊应该是百分比,所以0.0%

标签: r shiny dt


【解决方案1】:

您可以使用rowCallback 函数:

library(DT)

data <- matrix(c(0,0.64,-0.76234,0.43,1,19),nrow=3,byrow=T)

    datatable(data,options=list(
            rowCallback=JS("function( row, data, index ) {
                           $('td:eq(0)', row).html(data[0] % 1 != 0 | data[0]==0 ? (data[0]*100).toFixed(1) +'%':data[0]);
                           $('td:eq(1)', row).html(data[1] % 1 != 0 | data[1]==0 ? (data[1]*100).toFixed(1) +'%':data[1]);
                           }
                           ")))

此示例将数字乘以 100,四舍五入到小数点后 1 位,如果数字有小数部分或为 0,则添加百分号。如果没有,则保持原样。

仅在数据表的第一列和第二列上执行此操作。

【讨论】:

  • 感谢您的提示!你介意给我们一个 JS 行脚本,我们可能想要一个 big.mark = "" 来做几千?我假设经常需要并且可能对像我这样不了解 JS 的人非常有帮助:)
猜你喜欢
  • 1970-01-01
  • 2020-07-07
  • 2015-09-08
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
相关资源
最近更新 更多