R 以响应方式过滤/子集数据帧
我想过滤一个数据框,这样我只选择分类变量包含闪亮应用程序用户选择的值的行 以下是一个可复制的示例:R 以响应方式过滤/子集数据帧,r,shiny,R,Shiny,我想过滤一个数据框,这样我只选择分类变量包含闪亮应用程序用户选择的值的行 以下是一个可复制的示例: ## app.R ## library(shiny) library(shinydashboard) library(tidyverse) library(DT) ui <- dashboardPage( dashboardHeader(), dashboardSidebar( selectInput("cut", "Type of cut",
## app.R ##
library(shiny)
library(shinydashboard)
library(tidyverse)
library(DT)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
selectInput("cut", "Type of cut",
c("All",as.character(unique(diamonds$cut))), selected = "All",
multiple = TRUE)
),
dashboardBody(
DT::dataTableOutput("table")
)
)
server <- function(input, output) {
selectdata <- reactive({
diamonds %>%
filter(ifelse(any(input$cut == "All"), cut %in% unique(diamonds$cut),
cut %in% input$cut))
})
output$table <- DT::renderDT({
selectdata()
}, options = list(scrollX = TRUE))
}
shinyApp(ui, server)
##app.R##
图书馆(闪亮)
图书馆(shinydashboard)
图书馆(tidyverse)
图书馆(DT)
uiI将ifelse
替换为简单的if
条件。我想这是更安全的,因为管道到过滤器
,然后使用ifelse
可能会让您出现错误。考虑这个服务器代码:
library(shiny)
server <- function(input, output) {
selectdata <- reactive({
# Give back original data (no filter is needed)
if (any(input$cut == "All")) {
diamonds
} else {
# Subset data
# You can also use: base::subset(diamonds, cut %in% input$cut)
dplyr::filter(diamonds, cut %in% input$cut)
}
})
output$table <- DT::renderDT({
selectdata()
}, options = list(scrollX = TRUE))
}
库(闪亮)
server@RasmusFiskerBang在我看来,它也比笨重的ifelse
:-)更具可读性。看看这个,它已经有了这个功能