簡體   English   中英

RShiny:如何使用 checkboxGroupInput 匯總/子集/過濾數據?

[英]RShiny: how can I summarise/subset/filter data using checkboxGroupInput?

我正在嘗試使用復選框輸入來對數據進行子集、過濾和匯總。 我用虹膜數據模擬了這個問題。

我試圖讓用戶通過萼片寬度/長度、花瓣寬度/長度或兩者來總結虹膜數據。 單獨地,每個復選框都有效,但使用多個輸入選項不起作用。 同時選擇“Sepal”和“Petal”僅返回 Sepal 數據。

用戶界面:

ui <- fluidPage(
    fluidRow(
        box(
            title = "Choose data", width = 3, solidHeader = TRUE,
            status = "primary", collapsible = TRUE,
            checkboxGroupInput("iris_select", "Select measurements:",
                        choices = list("Sepal", "Petal"),
                        selected = c("Sepal")),
            verbatimTextOutput("whatdidiselect")),

        box(
            title = "See your data output", width = 9, solidHeader = TRUE,
            status = "success", collapsible = TRUE,
            DT::dataTableOutput("iris_output")
        )))

和服務器:

server <- function(input, output) {

     output$whatdidiselect <- renderText(input$iris_select)

     iris_summary <- reactive({
        if(all(c("Sepal") %in% input$iris_select)){
            iris %>% 
                group_by(., Species) %>%
                summarise(Mean_Sepal_Length = mean(Sepal.Length),
                          Mean_Sepal_Width = mean(Sepal.Width))}

            if(all(c("Petal") %in% input$iris_select)){
                iris %>% 
                    group_by(., Species) %>%
                    summarise(Mean_Petal_Length = mean(Petal.Length),
                              Mean_Petal_Width = mean(Petal.Width))}

                if(all(c("Sepal", "Petal") %in% input$iris_select)){
                    iris %>% 
                        group_by(., Species) %>%
                        summarise(Mean_Sepal_Length = mean(Sepal.Length),
                                  Mean_Sepal_Width = mean(Sepal.Width),
                                  Mean_Petal_Length = mean(Petal.Length),
                                  Mean_Petal_Width = mean(Petal.Width))} 
    })

    output$iris_output <- DT::renderDataTable({
        iris_summary()})
}

這似乎應該很簡單。 有人可以指出我要去哪里錯了嗎?

您需要反轉all邏輯(至少對於前兩次檢查),例如:

server <- function(input, output) {

  output$whatdidiselect <- renderText(input$iris_select)

  iris_summary <- reactive({
    if(all(input$iris_select == 'Sepal')){
      iris %>% 
        group_by(., Species) %>%
        summarise(Mean_Sepal_Length = mean(Sepal.Length),
                  Mean_Sepal_Width = mean(Sepal.Width))}

    else if(all(input$iris_select == 'Petal')){
      iris %>% 
        group_by(., Species) %>%
        summarise(Mean_Petal_Length = mean(Petal.Length),
                  Mean_Petal_Width = mean(Petal.Width))}

    else if(all(input$iris_select %in% c('Sepal', 'Petal'))){
      iris %>% 
        group_by(., Species) %>%
        summarise(Mean_Sepal_Length = mean(Sepal.Length),
                  Mean_Sepal_Width = mean(Sepal.Width),
                  Mean_Petal_Length = mean(Petal.Length),
                  Mean_Petal_Width = mean(Petal.Width))} 
  })

  output$iris_output <- DT::renderDataTable({
    iris_summary()})
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM