DT::datatable – 格式化所选列?

Posted

技术标签:

【中文标题】DT::datatable – 格式化所选列?【英文标题】:DT::datatable – Format selected column? 【发布时间】:2018-07-31 03:09:09 【问题描述】:

您能帮我处理 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))

我需要设置:

第一列:粗体,左对齐 第 3 行:粗体,右对齐

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

datatable 的 html 输出将用于 R markdown 文档。

【问题讨论】:

【参考方案1】:

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

这里我们将Sepal.Length 包装在bold 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)

编辑:

对于左/右对齐,您可以用 &lt;p align ="left"&gt;&lt;/p&gt; 换行

所以:iris$SepalLength2 &lt;- paste0('&lt;p align ="right"&gt;&lt;b&gt;', iris$Sepal.Length, '&lt;/b&gt;&lt;/p&gt;')

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

【讨论】:

谢谢,它有效。我使用 而不是

和 text-align 之类的样式。

【参考方案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))
)

【讨论】:

【参考方案3】:

自从最初提出这个问题以来已经有一段时间了,但我也遇到了同样的问题。这是一个更简单的解决方案,不需要编辑源数据或调用JS,而是使用functions within the DT package itself。

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')

【讨论】:

以上是关于DT::datatable – 格式化所选列?的主要内容,如果未能解决你的问题,请参考以下文章

根据所选列中的文本调整行高

如何在jqGrid中禁用所选列的搜索选项?

添加对不同于 id 的所选列的引用

如何根据所选列而不是Oracle中表的所有列获取不同的行

如何替换表*中的NA值以用于所选列*? data.frame,data.table

Shiny:合并 DT::datatable 中的单元格