2017-12-21 5 views
0

사용자가 목록에서 데이터를 선택할 수있게하려는 경우 (예 : mtcars, iris, USArrests). 사용자 선택에 따라 선택한 데이터 열을 선택할 수 있습니다. 아래 코드는 단지 mtcars colums 반짝 이는 사용자가 데이터 (저장된)와 그 열을 선택할 수있게합니까?

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]) 
    } 
}) 
} 
)) 

사용자가 dataframe 목록에서 (mtcars, 홍채, USArrest)을 선택할 수 있도록하는 것을 목표로, 코드를 수정하기 위해 어떤 제안

을 선택할 수? 이 원래의 대답에 더 유사하다 -

+0

당신이 당신의 예를 재현하려면'}))'코드의 끝이 없습니다. – COLO

답변

0

편집

여기에 체크 박스와 옵션입니다.

library(shiny) 
library(DT) 

runApp(list(
    ui = fluidPage(
     h2("Pick Columns from Various Dataframes"), 
     sidebarLayout(
      sidebarPanel(
       selectInput("dataset", "Dataset", c("mtcars", "iris", "USArrests")), 
       uiOutput("listCols") 
      ), 
      mainPanel(
       dataTableOutput('myTable') 
       ) 
     ) 
    ), 
    server = function(input, output) { 
     datasetInput <- reactive({ 
      switch(input$dataset, 
        "mtcars" = mtcars, 
        "iris" = iris, 
        "USArrests" = USArrests) 
     }) 

     output$listCols <- renderUI({ 
      checkboxGroupInput("listCols", "Columns to show:", 
           choices = names(datasetInput()), 
           selected = names(datasetInput())) 
      }) 

     output$myTable <- DT::renderDataTable({ 
      validate(
       need(!is.null(input$listCols), "Please select at least one column"), 
       need(input$listCols %in% names(datasetInput()), "") 
       ) 
      datatable(
       datasetInput()[, input$listCols, drop = FALSE], rownames = FALSE 
      ) 
     }) 
    } 
) 
) 

원래 대답

사용자 selectInput를 사용하여 dataframe를 선택할 수 있습니다. 그런 다음 DT extension colvis을 사용하여 열을 표시하거나 숨길 수 있습니다.

여기 예입니다 :

library(shiny) 
library(DT) 

runApp(list(
    ui = basicPage(
     h2("Pick Columns from Various Dataframes"), 
     selectInput("dataset", "Dataset", c("mtcars", "iris", "USArrests")), 
     dataTableOutput('myTable') 
    ), 
    server = function(input, output) { 
     datasetInput <- reactive({ 
      switch(input$dataset, 
        "mtcars" = mtcars, 
        "iris" = iris, 
        "USArrests" = USArrests) 
     }) 
     output$myTable <- DT::renderDataTable(
      datatable(
       datasetInput(), rownames = FALSE, 
       extensions = 'Buttons', options = list(dom = 'Bfrtip', buttons = I('colvis')) 
      ) 
     ) 
    } 
) 
) 
+0

감사합니다. 그것은 작동, 문제는 내 데이터가 열의 목록의 더 나은 시각화에 대한 제안 변수를 많이 포함되어 있습니까? –