使用Shiny,我试图根据用户输入过滤数据帧,然后显示过滤后的数据帧。我很难找到一种策略,允许我在适用时不过滤数据框并显示未过滤的数据框。我搜索了Stack Overflow的帮助,发现了类似的问题R - Shiny Filter for 'All' values。我试图实施Kristoffer Winther Balling推荐的解决方案,但没有成功。当我选择“None Selected”选项时,将显示一个空表而不是未过滤的表。
library(shiny)
library(tidyverse)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
radioButtons(inputId = "cut", label = "Select Cut",
choiceNames = c(levels(as.factor(diamonds$cut)), "None Selected"),
choiceValues = c(levels(as.factor(diamonds$cut)), NA))
),
mainPanel(tableOutput("diamonds_filtered"))
)
)
server <- function(input, output) {
output$diamonds_filtered <- renderTable({
diamonds_filtered <- diamonds
if (!is.na(input$cut)) {
diamonds_filtered <- filter(diamonds_filtered, cut == input$cut)
}
head(diamonds_filtered)
})
}
shinyApp(ui, server)
对不等于NA的用户输入进行过滤可按预期工作。 Proper filtering
然而,当输入为“未选择”且值为NA时,不显示未过滤的数据帧。 improper filtering
非常感谢任何关于我可能做错的建议。
答案 0 :(得分:0)
正如@HubertL在上面的评论中所推荐的那样,如果我更改&#34;无选择&#34;的值选项=&#34;&#34;并将我的if改为f (input$cut!="") {...
我得到了所需的功能。
library(shiny)
library(tidyverse)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
radioButtons(inputId = "cut", label = "Select Cut",
choiceNames = c(levels(as.factor(diamonds$cut)), "None Selected"),
choiceValues = c(levels(as.factor(diamonds$cut)), ""))
),
mainPanel(tableOutput("diamonds_filtered"))
)
)
server <- function(input, output) {
output$diamonds_filtered <- renderTable({
diamonds_filtered <- diamonds
if (input$cut != "")) {
diamonds_filtered <- filter(diamonds_filtered, cut == input$cut)
}
head(diamonds_filtered)
})
}
shinyApp(ui, server)