问题
I am dabbling with the datatable feature in shiny and I am interested in creating a wellpanel or a sidepanel that lists all the columns of a datatable and allows users to choose which columns they want to see on the datatable.
Right now this code below displays all the columns of toy dataset mtcars
library(shiny)
runApp(list(
ui = basicPage(
h2('The mtcars data'),
dataTableOutput('mytable')
),
server = function(input, output) {
output$mytable = renderDataTable({
mtcars
})
}
))
I am interested in providing the users the ability to turn these columns either on or off using a checkbox
[1] "mpg" "cyl" "disp" "hp" "drat"
[6] "wt" "qsec" "vs" "am" "gear"
[11] "carb"
Any help on addressing this issue is much appriciated. Thanks in advance.
回答1:
My example uses checkboxGroupInput
to select multiple columns
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])
}
})
}
))
回答2:
Here is an example. It uses selectInput
to select columns, and displays all columns by default until you select one or more specific columns.
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]
})
}
))
来源:https://stackoverflow.com/questions/36784906/shiny-allowling-users-to-choose-which-columns-to-display