【问题标题】:Using two dependent selectInput to filter a dataframe in R Shiny使用两个相关的 selectInput 过滤 R Shiny 中的数据帧
【发布时间】:2022-01-16 01:55:57
【问题描述】:

G'day 很棒的社区

我正在尝试制作一个数据框的仪表板,允许人们按所选列中的级别过滤数据框。这意味着用户选择列的第一个pickerInput,然后是基于所选列生成选项的第二个子pickerInput。我已经找到了一种使pickerInputs 相互依赖的方法,但是由于某种原因,当我尝试应用过滤时,我的数据框的值为零,我不明白为什么?

请查看使用 mtcars 数据集创建的代表

library(shiny)
library(shinyWidgets)
library(dplyr)
library(DT)
data(mtcars)


ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(uiOutput('select_filter'),
                 uiOutput('filter')),
  mainPanel(
    dataTableOutput('table')
  ),
  
))

server <- function(input, output, session) {
  data<-mtcars
  categories<-c('cyl','vs','am','gear','carb')
  
  output$select_filter <- renderUI({
    
    pickerInput("select_filter", "Select flexi filter", 
                choices = levels(as.factor(categories))
    )})
  
  output$filter <- renderUI({
    
    pickerInput("filter", "Flexi filter", 
                choices = unique(data[,input$select_filter]),
                options = list('actions-box'=TRUE), multiple= TRUE,
                selected = unique(data[,input$select_filter]))
    
    
  })
  
  filtered_data<- 
    #
    reactive ({data %>% filter(input$select_filter %in% input$filter)
      
    })
  
  output$table<-renderDataTable(filtered_data())
  
}

shinyApp(ui, server)

任何帮助将不胜感激!如果需要任何进一步的信息,请告诉我。 干杯

【问题讨论】:

    标签: r shiny shinydashboard shinyapps shiny-reactivity


    【解决方案1】:

    filter 中,使用.data 获取使用select_filter 变量的列值。还包括req,这样当input$select_filterNULL 时它不会在开始时出错。

      filtered_data <- 
        reactive ({
          req(input$select_filter)
          data %>% filter(.data[[input$select_filter]] %in% input$filter)
          
        })
    

    完整的应用代码 -

    library(shiny)
    library(shinyWidgets)
    library(dplyr)
    library(DT)
    
    data(mtcars)
    
    
    ui <- fluidPage(
      sidebarLayout(
        sidebarPanel(uiOutput('select_filter'),
                     uiOutput('filter')),
        mainPanel(
          dataTableOutput('table')
        ),
        
      ))
    
    server <- function(input, output, session) {
      data<-mtcars
      categories<-c('cyl','vs','am','gear','carb')
      
      output$select_filter <- renderUI({
        
        pickerInput("select_filter", "Select flexi filter", 
                    choices = levels(as.factor(categories))
        )})
      
      output$filter <- renderUI({
        
        pickerInput("filter", "Flexi filter", 
                    choices = unique(data[,input$select_filter]),
                    options = list('actions-box'=TRUE), multiple= TRUE,
                    selected = unique(data[,input$select_filter]))
        
        
      })
      
      filtered_data<- 
        #
        reactive ({
          req(input$select_filter)
          data %>% filter(.data[[input$select_filter]] %in% input$filter)
          
        })
      
      output$table<-renderDataTable(filtered_data())
      
    }
    
    shinyApp(ui, server)
    

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 2019-05-13
      • 2019-01-11
      • 2017-03-02
      • 2021-04-25
      • 1970-01-01
      • 2020-09-16
      • 2022-01-03
      • 2021-11-14
      相关资源
      最近更新 更多