R 数据帧的动态滤波
我知道已经有一些关于这个主题的问题,但我仍然在为我自己的项目奋斗 在我的系统中,有三个选择输入小部件,它们应该是相互反应的。只有有意义的组合才可能 代码现在更新为使用mtcars。有些变量名称现在很奇怪,但这应该很重要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
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