闪亮的允许用户选择要显示的列

时间:2016-04-22 04:36:55

标签: r datatable shiny dt

我正在研究闪亮的数据表功能,我有兴趣创建一个wellpanel或sidepanel,列出数据表的所有列,并允许用户选择他们想要在数据表上看到哪些列。

现在,此代码显示玩具数据集mtcars

的所有列
library(shiny)

runApp(list(
  ui = basicPage(
    h2('The mtcars data'),
    dataTableOutput('mytable')
  ),
  server = function(input, output) {
    output$mytable = renderDataTable({
      mtcars
    })
  }
))

我有兴趣为用户提供使用复选框打开或关闭这些列的功能

  [1] "mpg"  "cyl"  "disp" "hp"   "drat"
  [6] "wt"   "qsec" "vs"   "am"   "gear"
  [11] "carb"

解决这个问题的任何帮助都很受欢迎。提前谢谢。

2 个答案:

答案 0 :(得分:4)

这是一个例子。它使用selectInput来选择列,并默认显示所有列,直到您选择一个或多个特定列。

library(shiny)
runApp(list(
  ui = basicPage(
    selectInput("select", "Select columns to display", names(mtcars), multiple = TRUE),
    h2('The mtcars data'),
    dataTableOutput('mytable')
  ),
  server = function(input, output) {
    output$mytable = renderDataTable({
      columns = names(mtcars)
      if (!is.null(input$select)) {
        columns = input$select
      }
      mtcars[,columns,drop=FALSE]
    })
  }
))

答案 1 :(得分:3)

我的示例使用checkboxGroupInput来选择多个列

library(shiny)

vchoices <- 1:ncol(mtcars)
names(vchoices) <- names(mtcars)

runApp(list(
  ui = basicPage(
    h2('The mtcars data'),
    checkboxGroupInput("columns","Select Columns",choices=vchoices,inline = T),
    dataTableOutput('mytable')


  ),
  server = function(input, output) {

    observeEvent(input$columns,{
      cols <- as.numeric(input$columns)
      if(length(input$columns) == 1){
        df <- data.frame(mtcars[,cols])
        names(df) <- names(mtcars)[cols]
        output$mytable = renderDataTable(df)

      }else{
        output$mytable = renderDataTable(mtcars[,cols])

      }


    })

  }
))