繁体   English   中英

R-“所有”值的闪亮过滤器

[英]R - Shiny Filter for 'All' values

有没有办法在Shiny App上放置过滤器,但是Shiny知道是否没有选择显示所有数据的方法? 例如,使用ggplot2 diamonds数据,我已经建立了以下内容:

library(ggplot2)
library(shiny)
library(dplyr)
diamonds <- diamonds

#Unique cut dropdown
cut <- sort(unique(diamonds$cut))

#Unique color
color <- sort(unique(diamonds$color))

#Unique clarity
clarity <- sort(unique(diamonds$clarity))

#Shiny App

ui <- fluidPage(
  titlePanel("diamonds"),
  fluidRow(
  column(3,
       selectizeInput("CutSelect", "Cut", cut, selected = NULL, multiple = TRUE),
       br(),
       selectInput("ColorSelect", "Color", color),
       br(),
       selectInput("ClaritySelect", "Clarity", clarity)
),
tableOutput("results")
)
)
server <- function(input, output) {
output$results <- renderTable({
filtered <- 
  diamonds %>%
  filter(cut == input$CutSelect,
         color == input$ColorSelect,
         clarity == input$ClaritySelect)
filtered
})
}

shinyApp(ui = ui, server = server)

生成的应用程序如下所示:

在此处输入图片说明

在不清除数据的情况下,是否有办法在过滤器中添加“全部”运算符,使应用程序知道即使该维度有一个过滤器,在某些情况下“全部”也会派上用场?

对于剪切,具体来说,如果我将selectizeInput留为空白,则希望将其作为“全部”或“无过滤器”类型处理。

乐意提供更多有用的信息。

谢谢。

我建议在显示/过滤数据时使用DT DT具有内置的过滤器选项,使您可以过滤表中的一个或多个值或值范围。 您可以将过滤器放在表格的顶部或底部。 这是满足您目标的代码:

library(ggplot2)
library(shiny)
library(DT)
diamonds <- diamonds

#Shiny App

ui <- fluidPage(
           titlePanel("diamonds"),
        fluidRow(
           dataTableOutput("results")
        )
      )
server <- function(input, output) {
    output$results <- DT::renderDataTable(filter='top',{
       diamonds
    })
}

shinyApp(ui = ui, server = server)

空的selectInput返回NULL因此只有在selectInput不为NULL (即已选择一个或多个值)的情况下,才可以进行过滤:

server <- function(input, output) {
  output$results <- renderTable({
    filtered <- diamonds
    if (!is.null(input$CutSelect)) {
      filtered <- filtered %>% filter(cut == input$CutSelect)
    }
    if (!is.null(input$ColorSelect)) {
      filtered <- filtered %>% filter(color == input$ColorSelect)
    }
    if (!is.null(input$ClaritySelect)) {
      filtered <- filtered %>% filter(clarity == input$ClaritySelect)
    }
    filtered
  })
}

这样,如果selectInput为空( NULL ),则不会对该维度执行过滤。

暂无
暂无

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

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