【问题标题】:Data Table Format Row by Row Number数据表格式逐行数
【发布时间】:2017-07-10 08:50:27
【问题描述】:

我觉得这是一个基本的问题,但无论我搜索多少,我似乎都找不到一个直截了当的答案:

我正在尝试将我的数据表第 3 行的所有数字列格式化为百分比,并将单元格设为灰色。 格式化列非常简单,而且我发现了一些不同的选项可以根据列中的条件格式化行,但不是直接选择我希望格式化的行的直接方法。

我的代码有点乱,而且做了很多事情,所以我将仅使用 iris 数据集作为示例。

如何仅格式化数据表的第 3 行(将所有列中的数字设置为 % 并将背景设为灰色)?

server.R:

library(shiny)
library(DT)
shinyServer(function(input, output) {
  df<-datatable(iris, options = list(pageLength = 5))
  output$iris <- renderDataTable(df)
})


ui.R:

library(shiny)
shinyUI(fluidPage(
  titlePanel("Iris Data"),
  dataTableOutput("iris") 
)
)

【问题讨论】:

  • 谢谢 - 我试过了,但似乎这两个选项都有问题:使用 "tags$head( tags$style( HTML("tr:first-child, tr:first-child + tr { 字体粗细:粗体 }") )"
  • 抱歉,由于我的编辑出错了,必须在下一条评论中继续 :) ...尝试在 ui.R 中格式化表格适用于文本格式,但不适用于行背景颜色- 我猜 dataTable 设置可能会覆盖它。另一个答案 - 通过将数字更改为字符并添加 % 将数字格式化为百分比也对我不起作用,因为这意味着整个数据表都受到更改的影响,我的所有数字现在都是字符还有其他想法吗?

标签: r shiny datatables formatting dt


【解决方案1】:
library(DT)
dat <- iris[1:4]

rowCallback <- c(
  "function(row, dat, displayNum, index){",
  "  if(index == 3){",
  "    for(var j=1; j<dat.length; j++){",
  "      $('td:eq('+j+')', row)", 
  "        .css('background-color', 'yellow')",
  "        .html(100*dat[j] + '%');",
  "    }",
  "  }",
  "}"
)

datatable(dat, options = list(rowCallback = JS(rowCallback)))

【讨论】:

  • 谢谢!请注意:第三行有 index == 2,因为 JavaScript 从 0 开始计数。
  • 如果我将此 JS 代码与 rowGroup:rowGroup = list(dataSrc = "lastcolumn) 一起应用,它会显示最后一列(分组列),如果我不使用 JS 代码则不是这种情况。而且我没有循环所有最后一列,即for循环以:for(var j=1; j&lt;(dat.length-1); j++){",
  • @StéphaneLaurent - 假设我只想格式化该行中的某些单元格,而不是整行。我不擅长 JavaScript - 我在上面的代码中尝试了 '(const j of [1, 3, 4]){',但失败了。
猜你喜欢
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 2020-02-11
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
相关资源
最近更新 更多