【问题标题】:R Shiny linked checkboxGroupInputsR闪亮链接checkboxGroupInputs
【发布时间】:2020-07-31 01:03:47
【问题描述】:

大家好,

我需要你的帮助:我有一个名为 data_test 的数据框,你可以用这些行重现它:

 PC<-c('001','002','003','004','005','006','007','008','009','010')
 A<-c('2','2','1','1','2','0','2','0','1','0')
 B<-c('0','2','0','0','1','0','0','0','1','0')
 C<-c('1','0','0','0','2','2','0','0','0','1')
 D<-c('1','0','1','1','0','2','1','1','2','2')
 E<-c('0','0','0','2','2','0','0','0','0','2')
 F<-c('0','1','1','1','0','0','2','0','0','0')
 data_test <- data.frame(PC, A, B, C, D, E, F)

我有三个名为“variable1”、“variable2”和“variable3”的 chekboxGroupInputs。 这些 chekboxGroupInputs 中的每一个都有以下选择:“是”=“1”,“否”=“2”,“也许”=“0”。 当我在第一个 chekboxGroupInput 中选中“否”选项时,出现次数显示为“4”:ok,如果我在第二个 chekboxGroupInput 中选中“也许”选项,出现次数为“2”:ok。 但是,如果我取消选中“也许”框,则出现次数为“0”,而不是像以前那样返回“4”。 当我检查时一切正常,但如果我取消选中,出现次数下降到“0”,我不明白为什么。 由于我的数据框中有数十个变量,因此我将拥有与变量一样多的 chekboxGroupInputs,因此,如果您知道更好的方法来做到这一点,请告诉我。 非常感谢您的帮助。 这是我的程序的可重现示例:

 library(dplyr)
 library(shiny)

 ui <- fluidPage(
   fluidRow(
     column(3,
            checkboxGroupInput("variable1", "Occurences of column A :",
                               c("Yes (1)" = "1",
                                 "No (2)" = "2",
                                 "Perhaps (0)" = "0")),
            checkboxGroupInput("variable2", "Occurences of column B :",
                               c("Yes (1)" = "1",
                                 "No (2)" = "2",
                                 "Perhaps (0)" = "0")),
            checkboxGroupInput("variable3", "Occurences of column C :",
                               c("Yes (1)" = "1",
                                 "No (2)" = "2",
                                 "Perhaps (0)" = "0"))),

     column(3,
            tableOutput("data")),

     column(3,
            textOutput("result"))
     )
   )

 server <- function(input, output, session) {

   result <- 0

   observe({input$variable1

     output$result <- renderText({

       df1 <- filter(data_test, A %in% input$variable1)

       assign("df1", df1, envir = .GlobalEnv)

       result <- paste("Number of occurences = ", NROW(df1))

       })

     })

   observe({input$variable2

     if (is.null(input$variable2)){

       result <- paste("Number of occurences = ", NROW(df1))}

     else {

       output$result <- renderText({

         df2 <- filter(df1, B %in% input$variable2)

         assign("df2", df2, envir = .GlobalEnv)

         result <- paste("Number of occurences = ", NROW(df2))

         })

     }

     })

   observe({input$variable3

     if (is.null(input$variable3)){

       result <- paste("Number of occurences = ", NROW(df2)) }

     else {

       output$result <- renderText({

         df3 <- filter(df2, C %in% input$variable3)

         assign("df3", df3, envir = .GlobalEnv)

         result <- paste("Number of occurences = ", NROW(df3))

         })

     }

     })

   output$data <- renderTable({data_test})

 }

 shinyApp(ui, server)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我创建了一个在下面工作的示例。我将df 设为reactive(这意味着它应该使用df() 调用),并将所有过滤器放在一起。 is.null(input$variable1) 是必要的,因为(我假设)如果未选择任何内容,您需要所有行。

    library(dplyr)
    library(shiny)
    PC<-c('001','002','003','004','005','006','007','008','009','010')
    A<-c('2','2','1','1','2','0','2','0','1','0')
    B<-c('0','2','0','0','1','0','0','0','1','0')
    C<-c('1','0','0','0','2','2','0','0','0','1')
    D<-c('1','0','1','1','0','2','1','1','2','2')
    E<-c('0','0','0','2','2','0','0','0','0','2')
    F<-c('0','1','1','1','0','0','2','0','0','0')
    data_test <- data.frame(PC, A, B, C, D, E, F)
    
    ui <- fluidPage(
      fluidRow(
        column(3,
               checkboxGroupInput("variable1", "Occurences of column A :",
                                  c("Yes (1)" = "1",
                                    "No (2)" = "2",
                                    "Perhaps (0)" = "0")),
               checkboxGroupInput("variable2", "Occurences of column B :",
                                  c("Yes (1)" = "1",
                                    "No (2)" = "2",
                                    "Perhaps (0)" = "0")),
               checkboxGroupInput("variable3", "Occurences of column C :",
                                  c("Yes (1)" = "1",
                                    "No (2)" = "2",
                                    "Perhaps (0)" = "0"))),
    
        column(3,
               tableOutput("data")),
    
        column(3,
               textOutput("result"))
      )
    )
    
    server <- function(input, output, session) {
    
      result <- 0
    
      df1 <- reactive({
        filter(data_test,
               (is.null(input$variable1) | A %in% input$variable1),
               (is.null(input$variable2) | B %in% input$variable2),
               (is.null(input$variable3) | C %in% input$variable3))
      })
    
      output$result <- renderText(paste("Number of occurences = ", nrow(df1())))
    
    
      output$data <- renderTable({df1()})
    
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 嗨,Bas,非常感谢你,这正是我想要的。我看到您在其中放置了一条垂直线: (is.null(input$variable1) | A %in% input$variable1)。你知道我在哪里可以找到关于这条垂直线的信息吗?再次感谢。
    • 没问题!该栏是一个“或”,您可以通过在 R 控制台中键入 ?Logichelp("|") 来查找信息,或者转到此处:stat.ethz.ch/R-manual/R-devel/library/base/html/Logic.html
    • 太棒了!非常感谢巴斯,祝您有愉快的一天。
    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 2018-12-05
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多