R 数据帧的动态滤波

R 数据帧的动态滤波,r,dynamic,filter,shiny,R,Dynamic,Filter,Shiny,我知道已经有一些关于这个主题的问题,但我仍然在为我自己的项目奋斗 在我的系统中,有三个选择输入小部件,它们应该是相互反应的。只有有意义的组合才可能 代码现在更新为使用mtcars。有些变量名称现在很奇怪,但这应该很重要 library(shiny) ui <- fluidPage( selectInput(inputId = "INseason", label = "Season", choices = c("ALL", sort(unique(mtcars$am), decreas

我知道已经有一些关于这个主题的问题,但我仍然在为我自己的项目奋斗

在我的系统中,有三个选择输入小部件,它们应该是相互反应的。只有有意义的组合才可能

代码现在更新为使用mtcars。有些变量名称现在很奇怪,但这应该很重要

library(shiny)

ui <- fluidPage(
  selectInput(inputId = "INseason", label = "Season", choices = c("ALL", sort(unique(mtcars$am), decreasing = TRUE)), selected = NULL),
  selectInput(inputId = "INcategory",  label = "Category", choices = c("ALL", sort(unique(mtcars$gear))), selected = NULL),
  selectInput(inputId = "INteams", label = "Team", choices = c("ALL", sort(unique(mtcars$carb))), selected = NULL)

)

server <- function(input, output, session) {

  rv <- reactiveValues()
  rv$data <- mtcars

  observe({

    if(input$INseason != "ALL") {
      rv$data <- filter(rv$data, am == input$INseason)
    }
    if(input$INcategory != "ALL") {
      rv$data <- filter(rv$data, gear == input$INcategory)
    }
    if(input$INteams != "ALL") {
      rv$data <- filter(rv$data, carb == input$INteams)
    }

  })

  observe({
    updateSelectInput(session, "INseason", choices = c("ALL", sort(unique(rv$data$am), decreasing = TRUE)))
    updateSelectInput(session, "INcategory", choices = c("ALL", sort(unique(rv$data$gear))))
    updateSelectInput(session, "INteams", choices = c("ALL", sort(unique(rv$data$carb))))
  })

}

shinyApp(ui, server)

库(闪亮)

ui您必须将
selected
参数传递回
updateSelectInput
,否则它将始终默认为第一个类别(即使选择了某些内容)

将最后一个块替换为:

  observe({
    updateSelectInput(session, "INseason", 
                      choices = c("ALL", sort(unique(rv$data$am), decreasing = TRUE)),
                      selected = if(is.null(input$INseason)) "ALL" else input$INseason)
    updateSelectInput(session, "INcategory", 
                      choices = c("ALL", sort(unique(rv$data$gear))),
                      selected = if(is.null(input$INcategory)) "ALL" else input$INcategory)
    updateSelectInput(session, "INteams",
                      choices = c("ALL", sort(unique(rv$data$carb))),
                      selected = if(is.null(input$INteams)) "ALL" else input$INteams)
  })

(此代码可能更整洁,但它可以工作!)

您应该为
Shot\u Data.rds提供示例数据集,或者使用开源数据,例如
mtcars
,谢谢您的提示。我把密码改成mtcars