【问题标题】:How to format a column 1 way, but 1 row in that column another way in R datatable (DT)如何以 1 方式格式化列,但在 R 数据表(DT)中以另一种方式格式化该列中的 1 行
【发布时间】:2019-04-01 00:49:38
【问题描述】:

我正在努力解决 DT 问题,我想将 1 列格式化为 scientific annotation,但此列中的一些值是 percentage 值作为我正在处理的表。

如果我事先将表中的值更改为 paste(n, "%", sep = ' ')rowcallback 会卡在非数值上

在任何一种情况下,我都可以使用rowcallback(见下文)来格式化scientific annotation,或者在另一种情况下,使用formatPercentage('columnname', 2)以百分比来格式化一列,但我想对一列同时进行,和其中的单行,我需要以 'n % 的形式呈现,而该列的其余部分是科学的。

有没有办法在 1 列上执行 rowcallback,但排除特定行,

或将rowcallback 组合成scientific annotation,并将其他百分比的单元格格式化为百分比 (x %)

下面的datatable 生成sci。一个。但是如何将cars[5,2] 更改为 2 个十进制的 % 值,后面带有 % 符号?

datatable(cars/10, 
          options = list(
                 rowCallback = JS(
      "function(row, data) {",
      "    $('td:eq(2)', row).html(data[2].toExponential(1));",
      "}")
          )
)

【问题讨论】:

    标签: r dt


    【解决方案1】:

    在 R 中格式化列不是一个好的选择,因为列类型会变成字符,您将失去对列进行排序的可能性。这是 JavaScript 的方法:

    datatable(cars/10, 
              options = list(
                rowCallback = JS(
                  "function(row, data, num, index){",
                  "  if(index != 4){",
                  "    $('td:eq(2)', row).html(data[2].toExponential(1));",
                  "  }else{",
                  "    $('td:eq(2)', row).html((100*data[2]).toFixed(2) + '%')",
                  "  }",
                  "}")
              )
    )
    

    【讨论】:

      【解决方案2】:

      为了有科学的注释,你可以使用函数formatC(),参数format = 'e'digits = 1

      formatC(cars$dist[1:5] / 10, format = 'e', digits = 1)
      # [1] "2.0e-01" "1.0e+00" "4.0e-01" "2.2e+00" "1.6e+00"
      

      要进行百分比可视化,因为formatPercentage() 将转换所有列,您可以使用paste() 自己制作。

      然后,只需创建一个条件来告知,例如ifelse(),何时使用科学格式,何时使用百分比。

      cars %>% 
        mutate_all(funs(. / 10)) %>% 
        mutate(Condition = 1:n()) %>% 
        mutate(dist = ifelse(Condition == 5,
                             paste(round(dist, 2), '%'),
                             formatC(dist, format = 'e', digits = 1))
        ) %>% 
        select(-Condition) %>% 
        datatable()
      

      【讨论】:

        猜你喜欢
        • 2014-01-02
        • 2014-09-21
        • 1970-01-01
        • 1970-01-01
        • 2013-03-09
        • 2021-03-20
        • 2019-07-23
        • 1970-01-01
        • 2020-03-23
        相关资源
        最近更新 更多