具有多种条件的过滤表具有光泽

时间:2017-12-25 22:53:39

标签: r filter shiny

我正在尝试使用checkboxGroupInput来选择要显示的寄存器。但是,当通过多个条件过滤数据时,它不起作用。这是我正在使用的代码(使用的数据可以下载here):

库(有光泽)

ui <- fluidPage(

   titlePanel("Shiny Pokédex"),

   sidebarLayout(
     sidebarPanel(
       checkboxGroupInput("Generation", "Select Generation:", 
                          c("First" = 1,
                            "Second" = 2,
                            "Third" = 3,
                            "Forth" = 4,
                            "Fifth" = 5,
                            "Sixth" = 6),
                          inline = T)
     ),
    mainPanel(
      dataTableOutput("Generation")
    )  
  )
)

server <- function(input, output) {
   pokemon <- read.csv("pokemon.csv")

   output$Generation <- renderDataTable({
      pokemon[pokemon$Generation == input$Generation,-11]
   })
}

shinyApp(ui = ui, server = server)

我的目标是能够同时过滤多代。当只使用一个条件时它可以工作,但是当点击多个选项时,输出不是预期的。

1 个答案:

答案 0 :(得分:1)

您使用的是==,用于特定的相等。那就是:

1 == 1
# [1] TRUE
1 == 2
# [1] FALSE

但是当你开始在一边或另一边做多次时:

1 == c(1,2)
# [1]  TRUE FALSE

在这种情况下,它表示“1等于1,1比1不等于2”,这不是你想要的。 其中一个TRUE在所有行上循环使用,返回所有内容。

让我们试试%in%

1 %in% 1
# [1] TRUE
1 %in% c(1,2)
# [1] TRUE
c(1,3,4) %in% c(1,2)
# [1]  TRUE FALSE FALSE

这具有set-membership的所需属性,并返回与运算符左侧相同长度的logical向量。

申请使用时,只需将一个无功组件更改为:

output$Generation <- renderDataTable({
   pokemon[pokemon$Generation %in% input$Generation,-11]
})