使用 DT 包隐藏响应式数据表中的某些列

Posted

技术标签:

【中文标题】使用 DT 包隐藏响应式数据表中的某些列【英文标题】:Hide certain columns in a responsive data table using DT package 【发布时间】:2015-12-01 06:28:17 【问题描述】:

我正在尝试使用DT 包为我闪亮的应用程序创建一个响应式数据表。我想提前隐藏某些列。例如:

library("shiny")
library("DT")
shinyApp(
  ui = fluidPage(DT::dataTableOutput('tbl')),
  server = function(input, output) 
    output$tbl = DT::renderDataTable(
      iris,extensions="Responsive"
    )
  
)

这个输出给了我 5 列。它仅在我缩小页面时隐藏列。但是,我想提前隐藏最后 3 列,我只想每次都看到前两列。有没有办法做到这一点?

更新:

示例输出

【问题讨论】:

【参考方案1】:

您可以使用 DT 选项或扩展来隐藏表格中的列。

如果您希望它们被提前隐藏但有一个按钮让它们再次可见,ColVis 扩展应该适合您:link

如果您只是希望隐藏,请添加以下选项(不记得我现在在哪里看到它的文档..)

options=list(columnDefs = list(list(visible=FALSE, targets=columns2hide)))

【讨论】:

是否可以使用 ColVis 默认隐藏某些列,一旦用户选中该框就显示它们? 请注意,当您填写colmuns2hide 时,您应该填写列号。不确定是否可以输入列名。 你不能,你必须做match(columns2hide, colnames(iris)),如果columns2hide可能包含数据中不可用的列,则可能用na.omit包裹它 注意DT的列索引好像从0开始,而不是1,所以是match(columns2hide, colnames(iris))-1L 列索引会让你措手不及。它从 0 开始,但行名计为第 0 列。因此索引取决于您是否启用了行名。【参考方案2】:

我有另一种方式,我喜欢它的可读性。但它并没有解决列编号的问题。

library("shiny")
library("DT")
library(magrittr)
columns2hide <- match('Sepal.Width', colnames(iris))
shinyApp(
  ui = fluidPage(DT::dataTableOutput('tbl')),
  server = function(input, output) 
    output$tbl = DT::renderDataTable(
      
        dataTableProxy(outputId = 'tbl') %>%
          hideCols(hide = columns2hide)
        iris
      ,
      extensions="Responsive"
    )
  
)

dataTableProxy 创建一个代理对象,您可以使用几个函数对其进行操作(请参阅?dataTableProxy)。 例如,当单击按钮时,它可以很方便地隐藏/显示/选择/添加/...表格的行和列。 因为默认情况下它有deferUntilFlush = TRUE,所以它会等待处理表直到它的下一代。在这种情况下,这只是发生在以下行。

【讨论】:

以上是关于使用 DT 包隐藏响应式数据表中的某些列的主要内容,如果未能解决你的问题,请参考以下文章

“响应式”数据表容器DT :: datatable中使用widgetframe的数据表

Twitter Bootstrap 响应式 - 仅在桌面上显示表格列

数据表中的列摘要(来自包 DT)

R Shiny DT - 使用反应式编辑表中的值

如何使用隐藏列订购数据表

如何修复响应式数据表的最后一列