繁体   English   中英

在 R Shiny 中使用两个依赖 selectInput 过滤 dataframe

[英]Using two dependent selectInput to filter a dataframe in R Shiny

G'day 真棒社区

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

请查看使用 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)

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

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM