Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 以响应方式过滤/子集数据帧_R_Shiny - Fatal编程技术网

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
:-)更具可读性。看看这个,它已经有了这个功能