【问题标题】:Filter a data frame based on a Shiny user input equal to "None Selected" = NA根据等于“未选择”= NA 的闪亮用户输入过滤数据框
【发布时间】:2017-11-25 00:51:11
【问题描述】:

使用 Shiny,我试图根据用户输入过滤数据框,然后显示过滤后的数据框。我正在努力寻找一种策略,使我能够在适用时不过滤数据框并显示未过滤的数据框。我搜索了 Stack Overflow 寻求帮助,发现了这个类似的问题 R - Shiny Filter for 'All' values。我尝试实施 Kristoffer Winther Balling 推荐的解决方案,但没有成功。当我选择“未选择”选项时,会显示一个空表而不是未过滤的表。

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

非常感谢任何关于我可能做错的建议。

【问题讨论】:

  • 改用if (input$cut!="") {...
  • @HubertL 非常感谢您的建议!一旦我将“None Selected”选项的值修改为 =“”并按照您的建议更改了我的 if 语句,我得到了所需的输出。谢谢!!我已根据您的建议回答了以下问题。
  • 如果你保留 NA,它应该也可以工作

标签: r shiny dplyr


【解决方案1】:

按照上述 cmets 中 @HubertL 的建议,如果我将“未选择”选项的值更改为 =“”并将我的 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 2015-01-19
    • 2022-01-17
    • 2014-02-26
    • 1970-01-01
    • 2021-03-21
    • 2015-05-06
    相关资源
    最近更新 更多