使用两个相关的 selectInput 过滤 R Shiny 中的数据帧
Posted
技术标签:
【中文标题】使用两个相关的 selectInput 过滤 R Shiny 中的数据帧【英文标题】:Using two dependent selectInput to filter a dataframe in R Shiny 【发布时间】:2022-01-16 01:55:57 【问题描述】:G'day 很棒的社区
我正在尝试制作一个数据框的仪表板,允许人们按所选列中的级别过滤数据框。这意味着用户选择列的第一个pickerInput
,然后是基于所选列生成选项的第二个子pickerInput
。我已经找到了一种使pickerInput
s 相互依赖的方法,但是由于某种原因,当我尝试应用过滤时,我的数据框的值为零,我不明白为什么?
请查看使用 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)
任何帮助将不胜感激!如果需要任何进一步的信息,请告诉我。 干杯
【问题讨论】:
【参考方案1】:在filter
中,使用.data
获取使用select_filter
变量的列值。还包括req
,这样当input$select_filter
为NULL
时它不会在开始时出错。
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)
【讨论】:
以上是关于使用两个相关的 selectInput 过滤 R Shiny 中的数据帧的主要内容,如果未能解决你的问题,请参考以下文章
R/Shiny 应用程序中的三个相互依赖的 selectInput
Shiny R:当 selectInput 值改变时重置其他输入值
selectInput 选择依赖于 R Shiny Flexdashboard 的另一个 selectInput