अपने चमकदार ऐप में, मैं अपने डेटा को फ़िल्टर करने के लिए चेकबॉक्स का उपयोग कर रहा हूं। उदाहरण पर विचार करें जहां मेरे पास सेट और रंगों के साथ डेटाफ्रेम है: सेट 1 में लाल और पीले रंग होते हैं, सेट 2 में केवल रंग लाल होता है और सेट 3 में केवल रंग पीला होता है।

जब मैं इस समय अपने डेटा को लाल और पीले रंग से फ़िल्टर करता हूं, तो यह सेट 2 (केवल लाल होता है), सेट 3 (केवल पीला होता है) और सेट 1 देता है जिसमें दोनों शामिल होते हैं। हालांकि, मेरा वांछित आउटपुट यह होगा कि लाल और पीले रंग को चुनना केवल उस समूह को वापस कर देगा जिसमें दोनों रंग (सेट 1) शामिल हैं।

मैं चाहता हूं कि लौटा हुआ समूह मेरे चेकबॉक्स चयन से बिल्कुल मेल खाए। यानी सिर्फ लाल की जाँच करने से वह समूह वापस आ जाएगा जिसमें केवल लाल होता है, सिर्फ पीले रंग की जाँच करने से वह समूह वापस आ जाएगा जिसमें केवल पीला होता है और लाल और पीले रंग की जाँच उस समूह को लौटाती है जिसमें लाल और पीला होता है।

इस उदाहरण के लिए कोड (यह मेरे ऐप का सरलीकृत संस्करण है) इस प्रकार है:

मेरा सर्वर:

library(dplyr)
library(shiny)
shinyServer(function(input, output) {

  data <- structure(list(Set = c("Set1", "Set1", "Set1", "Set2", "Set2", 
                             "Set2", "Set3", "Set3", "Set3", "Set4"), Colour = c("red", "red", 
                                                                                 "yellow", "red", "red", "red", "yellow", "yellow", "yellow", 
                                                                                 "blue")), class = "data.frame", row.names = c(NA, -10L))

  output$choose_colour <- renderUI({

    colour.names <- as.vector( unique(data$Colour ))

    checkboxGroupInput("colours", "Choose Colours to Include", 
                       choices  = colour.names)
  })

  model.data <- reactive({

    filtered_data <- data %>% group_by(Set) %>% filter(all(Colour%in% input$colours))
    filtered_data

  })

  output$filteredData <- renderDataTable({
    filtered_data <- model.data()
    filtered_data
  })

})

मेरा यूआई:

ui <- fluidPage(


 mainPanel(
  uiOutput('choose_colour'),
  
 
  dataTableOutput('filteredData')
  
)
)
0
Niam45 14 अक्टूबर 2020, 19:34

1 उत्तर

सबसे बढ़िया उत्तर

मैंने ऑर्डर को चारों ओर बदल दिया और सभी के लिए कोई भी बदल दिया

library(dplyr)
library(shiny)
library(purrr)
server <- shinyServer(function(input, output) {
  
  data <- structure(list(Set = c("Set1", "Set1", "Set1", "Set2", "Set2", 
                                 "Set2", "Set3", "Set3", "Set3", "Set4"), Colour = c("red", "red", 
                                                                                     "yellow", "red", "red", "red", "yellow", "yellow", "yellow", 
                                                                                     "blue")), class = "data.frame", row.names = c(NA, -10L))
  
  output$choose_colour <- renderUI({
    
    colour.names <- as.vector( unique(data$Colour ))
    
    checkboxGroupInput("colours", "Choose Colours to Include", 
                       choices  = colour.names)
  })
  
  model.data <- reactive({
    
    filtered_data <- data %>% group_by(Set) %>% filter(all(Colour %in% input$colours) & all(input$colours %in%Colour))
    filtered_data
    
  })
  
  output$filteredData <- renderDataTable({
    filtered_data <- model.data()
    filtered_data
  })
  
})

ui <- fluidPage(
  
  
  mainPanel(
    uiOutput('choose_colour'),
    
    
    dataTableOutput('filteredData')
    
  )
)

shinyApp(ui,server)
1
Bruno 15 अक्टूबर 2020, 21:51