使用闪亮的动态CheckboxGroupInput

时间:2017-08-02 12:00:29

标签: r user-interface checkbox dynamic shiny

我正在尝试创建一个复选框,以便能够按年过滤数据集。然而,并非每个变量都包含每年的所有数据,所以我只想要变量在ui中显示数据的年份。遗憾的是,在将我的代码拆分为条件面板后,按钮不再过滤。

conditionalPanel(condition = "input.Select2 == 'AFD' | input.Select2 == 'Piraten'",
                           checkboxGroupInput("Year", label = h3("Checkbox group"), 
                                              choices =  "2013"),
                                              selected = "2013"),
         conditionalPanel(condition = "input.Select2 == 'DieLinke'",
                         checkboxGroupInput("Year", label = h3("Checkbox group"), 
                                            choices = list("2009", "2013"),
                                            selected = "2013")),
        conditionalPanel(condition = "input.Select2 == 'Gruene' | input.Select2 == 'FDP' | input.Select2 == 'SPD' | input.Select2 == 'CDU'",
                         checkboxGroupInput("Year", label = h3("Checkbox group"), 
                                            choices = list("1998", "2002", "2005","2009", "2013"),
       selected = "2013"))

有谁知道为什么?

以下是在服务器功能中生成的绘图示例:

dfParteien %>%
                                                filter(Partei %in% chosen_party) %>% 
                                                filter(Jahr %in% input$Year) %>%
                                                count(word) %>%
                                                with(wordcloud(word, n, max.words = input$Slider1, colors=pal12))

1 个答案:

答案 0 :(得分:3)

以下是使用mtcars数据集的工作示例,该示例将帮助您实现动态checkboxGroupInput并进一步过滤数据框:

library(shiny)
library(DT)
data <- mtcars

shinyApp(
  ui = fluidPage(
    selectInput("select1", "select cyl:", choices = unique(data$cyl)),
    uiOutput("checkbox"),
dataTableOutput("table")
  ),
  server = function(input, output) {

    output$checkbox <- renderUI({
      choice <-  unique(data[data$cyl %in% input$select1, "gear"])
      checkboxGroupInput("checkbox","Select gear", choices = choice, selected = choice[1])

    })

    output$table <- renderDataTable({
      data <-  data %>% filter(cyl %in% input$select1) %>% filter(gear %in% input$checkbox)
      datatable(data)
    })

   }
)

您实际上不需要使用conditionalPanel,如果您只是将checkboxGroupInput移至服务器并使用input$select来过滤您的选择,则效果会更好。

首先: 您的示例代码不好,您应该学习如何创建reproducible example

其次: 你的代码有很少的错误,例如给三个checkboxGroupInput小部件提供相同的ID(年份),这是不可行的,每个小部件的ID必须是唯一的。