【问题标题】:DT::datatable – Format selected column?DT::datatable – 格式化所选列?
【发布时间】: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 文档。

【问题讨论】:

    标签: r knitr r-markdown dt


    【解决方案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')
      

      【讨论】:

        猜你喜欢
        • 2020-04-01
        • 1970-01-01
        • 2019-04-12
        • 2018-04-13
        • 2020-01-21
        • 2018-03-04
        • 1970-01-01
        • 2016-05-23
        • 1970-01-01
        相关资源
        最近更新 更多