DT::datatable - 如何格式化选定列?

8

你能帮我处理DT::datatable列格式吗?例如,我有这样的一个表格:

DT::datatable(iris, 
          class = 'row-border stripe hover compact', 
          rownames = F, 
          autoHideNavigation = T,
          options = list(pageLength = nrow(summary.month),
                         searching = F,
                         paging = F,
                         info = F))

我需要设置:

  • 第一列:加粗,左对齐
  • 第三列:加粗,右对齐

我发现应该使用columns.ClassName,但是如何在R中设置类样式?

Datatable的html输出将在R Markdown文档中使用。

3个回答

10

这个问题最初提出已经有一段时间了,但我也遇到了同样的问题。这里有一个更简单的解决方案,不需要编辑源数据或调用JS,而是使用DT包内部的函数formatCurrency

DT::datatable(iris, 
          class = 'row-border stripe hover compact', 
          rownames = F, 
          autoHideNavigation = T, escape =FALSE) %>% 
  formatStyle(columns = c("Sepal.Length"), fontWeight = 'bold', `text-align` = 'left') %>% 
  formatStyle(columns = c("Petal.Length"), fontWeight = 'bold', `text-align` = 'right')

8

到目前为止,我唯一能让它工作的方法是先手动设置HTML标签,然后使用escape = FALSE

这里我们将Sepal.Lengthbold HTML标签包裹:

iris$SepalLength2 <- paste0("<b>", iris$Sepal.Length, "</b>")>

然后使用escape = FALSE,以便解析HTML标签。
datatable(iris, 
          class = 'row-border stripe hover compact', 
          rownames = F, 
          autoHideNavigation = T, escape =FALSE)

enter image description here

编辑:

对于左/右对齐,您可以将其包装在<p align ="left"></p>

所以:iris$SepalLength2 <- paste0('<p align ="right"><b>', iris$Sepal.Length, '</b></p>')

请注意,我既不是HTML专家,也不是这个特定库的专家,但这似乎是实现您所需结果的一种方式。


2
谢谢,它有效。我使用了<div style...>而不是<p>,并像text-align一样进行了样式设置。 - Marek L.

2

您无需修改数据内容。相反,您可以使用rowCallback选项:

library(DT)

rowCallback <- c(
  "function(row, data, index){",
  "  $(this.api().cell(index, 0).node())",
  "    .css('text-align', 'left')",
  "    .css('font-weight', 'bold');",
  "  $(this.api().cell(index, 2).node())",
  "    .css('text-align', 'right')",
  "    .css('font-weight', 'bold');",
  "}"
)

DT::datatable(iris, 
              class = 'row-border stripe hover compact', 
              rownames = FALSE, 
              autoHideNavigation = TRUE,
              options = list(pageLength = 5,
                             searching = FALSE,
                             paging = TRUE,
                             info = FALSE, 
                             rowCallback = JS(rowCallback))
)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接