【问题标题】:How to mark last row in results of DataTable using R如何使用 R 标记 DataTable 结果中的最后一行
【发布时间】:2017-04-06 11:21:52
【问题描述】:

我想在使用 DT 包生成的数据表中标记(例如粗体)最后一行。 假设我们有一个包含 iris 数据集的表:

library(DT)
datatable(iris)

结果:

所以我们有 150 行,我想加粗只有 150 行

编辑: @BigDataScientist 让我清楚这一点。我有这个:

 output$tbl <- 
    DT::renderDataTable(
      data() %>% # let's say iris data - it doesn't matter
      bind_rows(summarise(data(), SUM = "SUM", A = sum(A), B = sum(B), 
                           C = sum(C), D = sum(D), 
                           E = sum(E), F = sum(F))) %>%
      mutate(SUM = rowSums(.[2:6])),
    extensions = 'Buttons', 
    options = list(
      dom = 'Blfrtip',
      lengthMenu = list(c(-1, 5, 10, 15, 20, 25), c('All', '5', '10', '15', '20', '25')),
      buttons = list('copy',
                     list(extend = 'excel',
                          filename = 'report'),
                     list(extend = 'pdf',
                          filename = 'report'),
                     'print'),
     rownames = FALSE,
     server = FALSE
    ) %>%
    formatStyle(
     target = "row",
     fontWeight = styleEqual(dim(.)[1], "bold")
    )
 )

所以,我想在最后一行添加粗体;在这种情况下,列的总和;到这个管道,所以一切都将是一体的(一个管道)。

【问题讨论】:

  • 我猜你要求最后一行是粗体,而不考虑具体值(这里是 150)?
  • 是的,没错。

标签: r shiny dt


【解决方案1】:

如果您稍微修改一下代码,这个page 会帮助您:

formatStyle(
  datatable(iris), 0, target = "row",
  fontWeight = styleEqual(dim(iris)[1], "bold")
)

编辑: 要求(另外)将数据作为reactive() 传递,并使用 Shiny 中的管道。好吧,我只能提供一种解决方法。我对管道不太熟悉,尤其是如何传递多个参数。

shinyApp(
  ui = fluidPage(fluidRow(column(12, DT::dataTableOutput('tbl')))),
  server = function(input, output) {
    irisReact <- reactive(iris)
    dimIrisReact <- reactive(dim(iris)[1])    
    output$tbl = DT::renderDataTable(
      irisReact() %>% datatable() %>% formatStyle(
        0, target = "row",
        fontWeight = styleEqual(dimIrisReact(), "bold")
      )
    )
  }
)

【讨论】:

  • 谢谢,这正是我想要的!我只需要在我闪亮的应用程序中测试它,如果一切正常,我会告诉你。
  • 不幸的是,我无法处理反应对象上的 dim 函数。我有这样的东西:反应数据管道...... %&gt;% formatStyle( target = "row", fontWeight = styleEqual(dim(.)[1], "bold")但这不起作用。
  • 让我看看,你希望数据变量(这里是 iris)是响应式的,对吧?
  • 我也编辑了我的帖子。我无法通过 magrittr 传递和使用多个输入:(。我只能帮助解决方法,见上文。
【解决方案2】:

BigDataScientist 的解决方案在禁用数据表 rownames = F 中的行名时失败。

如果您想隐藏行名并将最后一行加粗,解决方案是无论如何设置rownames = T,然后隐藏它们。这对我有用:

library(DT)

data <- head(iris)

datatable(data, 
          rownames = T, # set rownames T
          options = list(columnDefs = list(list(visible = F, targets = 0)))) %>% # hide the rownames
  formatStyle(0, target = "row",
              fontWeight = styleEqual(dim(data)[1], "bold"))

【讨论】:

    【解决方案3】:

    除了 BigDataScientist 的回答之外,我还建议查看:

    http://rstudio.github.io/DT/functions.html

    【讨论】:

      猜你喜欢
      • 2021-06-27
      • 2019-07-23
      • 2011-05-20
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      相关资源
      最近更新 更多