首页 文章

从R shine中的selectInput过滤

提问于
浏览
1

我正在尝试让用户上传.csv文件,然后获取该.csv文件的列(因子)并创建用户输入以确定将为数据框选择该字段中的哪些唯一名称 .

所以,如果我有以下示例data.frame:

COURSE   VALUE
1      A       7
2      C       2
3      C       2
4      B       9
...

我想要使用Select_Input进行过滤,用户可以选择选择说A和C,并且只对具有A和C的行过滤数据框 . 下面是为select_Input生成UI的代码

output$choose_course<-renderUI{
 # If missing input, return to avoid error later in function
if(is.null(input$model.input))
 return()

# Get the data set with the appropriate name
course.names <-c("All",as.vector(t(unique(select_(model.data0(),"COURSE")))))

selectInput("courses","Choose courses", choices=course.names, multiple=TRUE)    
}

请注意,model.data0()是用户通过.csv文件输入的反应数据 . 第一部分代码工作正常(但可能格式化了下一个东西?)并显示用户输入选择 . 接下来我们尝试从selectInput过滤...

model.data<-reactive({
if(is.null(input$model.input))
  return()

localdata<-model.data0()
if(input$courses!="All"){
  localdata<-localdata[localdata$COURSE==unlist(input$courses),]
}
})

但是,这会返回错误“参数1(类型'列表')无法由'cat'处理” . 我尝试上面的取消列表将其更改为向量但似乎没有工作 . 我有什么想法可以过滤我的数据?

1 回答

  • 2

    你可以尝试这样做:

    require(shiny)
    
    ui <- fluidPage( 
      sidebarLayout(
        sidebarPanel(
          uiOutput('choose_course')
        ),
        mainPanel(
          tableOutput('courseTable')
        )
      )
    )
    
    server <- function(input, output, session) {
      # Build data, would be replaced by the csv loading in your case
      n <- 10
      model.data0 <- reactive ({
        data.frame( "COURSE" = sample(LETTERS[1:3], n, replace=TRUE),
                    "VALUE"  = sample(1:10, n, replace=TRUE)) 
      })
    
      # Render selectInput 
      output$choose_course <- renderUI({
        course.names <- as.vector( unique(model.data0()$COURSE) )
        selectInput("courses","Choose courses", choices=course.names, multiple=TRUE)    
      })
    
      # Subset so that only the selected rows are in model.data
      model.data <- reactive({
        subset(model.data0(), COURSE %in% input$courses)
      })
    
      output$courseTable <- renderTable({ model.data() })
    }
    runApp(shinyApp(ui,server))
    

相关问题