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

时间:2015-09-05 03:22:15

标签: r shiny dt

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

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

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

更新

示例输出

enter image description here

2 个答案:

答案 0 :(得分:18)

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

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

如果您只是希望保持隐藏,请添加以下选项(无法记住我现在看到其文档的位置..)

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

答案 1 :(得分:0)

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

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,所以它一直在等待对表的处理,直到其下一代为止。在这种情况下,这仅发生在下一行。