【发布时间】:2021-11-25 21:11:48
【问题描述】:
我正在创建一个 Rshiny 应用程序,让用户可以选择使用与过滤器行对应的复选框来过滤数据框。用户还可以选择通过单选按钮来控制过滤器逻辑以使用“AND”逻辑或“OR”逻辑。我创建了一个使用字母 x-z 作为过滤器选项的最小可重现示例,其中行具有 x、y 和 z 的所有可能组合。然而,复选框将只有 x、y 或 z 选项。如果用户选择了 OR 逻辑和所有字母,则每一行都将可见。如果用户选择了 OR 逻辑并且只有“x”和“y”,则只会显示行 x、y、xy、xyz、xz、yz。如果用户选择了相同的“x”和“y”,但选择了 AND 逻辑,则只会显示“xy”和“xyz”行。
我在为此创建过滤逻辑时遇到困难,我们将不胜感激。实际的过滤器有大约 10 个独特的选择,随着数据帧复杂性的增加,这些选择可能会增加,我想让过滤器尽可能灵活,而不是对每个可能的组合进行硬编码。
一个可重现的例子:
df <- data.frame(value = 1:7,
filter = c("x","y","z","xy", "xz", "yz", "xyz"))
library(shiny)
ui <- fluidPage(
title = "Example",
sidebarLayout(
sidebarPanel(
radioButtons("andOR",
label = "Filters Logic:",
c("OR", "AND"),
inline = TRUE),
checkboxGroupInput("filter", "Filter Options:",
letters[24:26], selected = letters[24:26])
),
mainPanel(
DT::dataTableOutput("mytable1")
)
)
)
server <- function(input, output) {
#filtering logic
filteredData <- reactive({
if(input$andOR == 'OR') {
df %>%
filter()
} else {
df %>%
filter()
}
})
output$mytable1 <- DT::renderDataTable({
DT::datatable(filteredData())
})
}
shinyApp(ui, server)
【问题讨论】: