Dynamic 动态过滤数据帧

Dynamic 动态过滤数据帧,dynamic,filter,shiny,reactive,Dynamic,Filter,Shiny,Reactive,我正在尝试基于激活过滤我的数据帧的条件面板的MaterialSwitch动态过滤数据帧。如果禁用所有过滤器,我只希望应用非条件过滤器 因此,仅当材料开关激活且过滤器应可组合时,过滤器才应适用 然而,我一次只能得到一个条件过滤器来工作。当所有材质开关均未激活时,也不会生成绘图 我制作了一个小应用程序,它再现了我的问题: 全球: library(dplyr) library(shiny) library(ggplot2) library(shinyWidgets) ConversionRate&l

我正在尝试基于激活过滤我的数据帧的条件面板的MaterialSwitch动态过滤数据帧。如果禁用所有过滤器,我只希望应用非条件过滤器

因此,仅当材料开关激活且过滤器应可组合时,过滤器才应适用

然而,我一次只能得到一个条件过滤器来工作。当所有材质开关均未激活时,也不会生成绘图

我制作了一个小应用程序,它再现了我的问题:

全球:

library(dplyr)
library(shiny)
library(ggplot2)
library(shinyWidgets)

ConversionRate<- data.frame(IDVendedor = c(1:12),
                   Date = sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 12),
                   BirthDate = sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 12),
                   Bank = sample(1:6, 12, replace = T),
                   Validity = c('Validity1', 'Validity4','Validity5','Validity6','Validity7','Validity1','Validity2','Validity3','Validity4','Validity5','Validity6','Validity7'),
                   LastStep = sample(1:7, 12, replace = T))
服务器:

shinyServer(function(input, output) {

  output$BD1 <- renderUI({
    sliderInput("DateBirth", label = "Birthdate", 
                min = as.Date('1920-01-01'), 
                max = as.Date('2010-12-31'),
                value = c(as.Date('1945-08-01'), as.Date('2015-12-31')),
                ticks = F, animate = animationOptions(interval = 30, loop = T))
  })
  output$B1 <- renderUI({
    selectInput("Bank1", "Bank", choices = c(1:10), selected = c(1:2), selectize = TRUE, multiple = TRUE)
  })

  datasubCR1 <- reactive({
    if(input$BirthDateswitch1 == 1){
      ConversionRate[ConversionRate$BirthDate >= input$DateBirth[1] & ConversionRate$BirthDate <= input$DateBirth[2],]
    }

  })
  datasubCR1 <- reactive({
    if(input$Bankswitch1 == 1){
      datasubCR1()[datasubCR1$Bank %in% input$Bank1, ]
    }
  })


  output$Plot <- renderPlot({
    datasubCR1() %>%
      filter(Date >= input$Datetest[1] & Date <= input$Datetest[2]) %>%
      group_by(LastStep) %>%
      tally(LastStep >= 1) %>%
      ggplot(aes(LastStep, n)) +
      geom_col(colour = "#a96aef", fill = "#a96aef")

  })

})
shinyServer(功能(输入、输出){
产出$BD1%
ggplot(aes(最后一步,n))+
几何图形颜色(color=“#a96aef”,fill=“#a96aef”)
})
})
在这一点上,我感觉像是在遵循完全错误的方法


提前谢谢

您似乎有两个以相同方式命名的reactive(
datasubCR1
),第二个也引用了“自身”。我认为在这些方面可以采用一种更简单的方法(没有进行测试)


datasubCR1只要我在renderPlot中禁用dplyr过滤器,它就可以工作。在将非条件筛选器转移到反应式表达式后,这工作正常:datasubCR1 input$Datetest[1]&DateshinyServer(function(input, output) {

  output$BD1 <- renderUI({
    sliderInput("DateBirth", label = "Birthdate", 
                min = as.Date('1920-01-01'), 
                max = as.Date('2010-12-31'),
                value = c(as.Date('1945-08-01'), as.Date('2015-12-31')),
                ticks = F, animate = animationOptions(interval = 30, loop = T))
  })
  output$B1 <- renderUI({
    selectInput("Bank1", "Bank", choices = c(1:10), selected = c(1:2), selectize = TRUE, multiple = TRUE)
  })

  datasubCR1 <- reactive({
    if(input$BirthDateswitch1 == 1){
      ConversionRate[ConversionRate$BirthDate >= input$DateBirth[1] & ConversionRate$BirthDate <= input$DateBirth[2],]
    }

  })
  datasubCR1 <- reactive({
    if(input$Bankswitch1 == 1){
      datasubCR1()[datasubCR1$Bank %in% input$Bank1, ]
    }
  })


  output$Plot <- renderPlot({
    datasubCR1() %>%
      filter(Date >= input$Datetest[1] & Date <= input$Datetest[2]) %>%
      group_by(LastStep) %>%
      tally(LastStep >= 1) %>%
      ggplot(aes(LastStep, n)) +
      geom_col(colour = "#a96aef", fill = "#a96aef")

  })

})
  datasubCR1 <- reactive({
    out <- ConversionRate
    if(input$BirthDateswitch1 == 1) {
      out <- out[out$BirthDate >= input$DateBirth[1] & out$BirthDate <= input$DateBirth[2],]
    }
    if(input$Bankswitch1 == 1){
      out <- out[out$Bank %in% input$Bank1, ]
    }
   out
  })