[英]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.