R Shiny - 使用Selectinput作为列选择到子集数据框

时间:2018-01-31 00:56:30

标签: r shiny subset

我正在使用Shiny来接收用户的txt文件。文件组成完全取决于用户 - 文件没有设置标头。

data_vals <- reactive({
    file1 <- input$file1
    if (is.null(file1))return(NULL)
    read.table(fill=TRUE,file=input$file1$datapath, header=TRUE, colClasses = 
    "factor")})

从这个文件中,我从用户提交的头文件中创建一个下拉列表:

observe({
  req(input$file1)
  dsnames <- names(data_labels())
  cb_options <- list()
  cb_options[dsnames] <- dsnames
  output$choose_filt1<- renderUI({
   selectInput("filt1", "Filter Level 1", cb_options)
  })
 })

然后,显示列表中唯一项目的复选框,供用户取消选择。

 observe({
  filt1_data <- data_labels()[,input$filt1]
  filt1_uni <- unique(filt1_data)
  output$inCheckboxGroup1 <- renderUI({
   checkboxGroupInput("inCheckboxGroup1", "Filter Level 1 Options:",
                      choices=filt1_uni,
                      selected=filt1_uni)
  })
 })

我想使用某种类型的子集来按列过滤data_vals(即输入$ filt1)和选中的框(输入$ inCheckboxGroup1)。我不确定如何做到这一点,因为子集(data_vals,%input $ inInckboxGroup1中的NAME%)正在寻找NAME作为列标题,而不是看作用户选择的输入。

我试图使用:

subset(data_vals, input$inCheckboxGroup1 %in$ input$inCheckboxGroup1)

但是,这不会产生表格(它是空白的)。我还使用了subset(data_vals, Column1Header %in% input$inCheckboxGroup1),它有效,所以我知道它不是代码的复选框部分。

是否可以按照我描述的方式使用子集,还是有其他工具可供使用?

1 个答案:

答案 0 :(得分:0)

我认为您可以通过不使用<select> <option> Daniel </option> <option> Adam </option> <option> Charlie </option> <option> Brad </option> </select> 来解决您的问题,因为您的列名是变量。请参阅以下示例:

subset

所以在你的情况下你可以使用:

A = 1
B ='am'

# This does not work
mtcars2 = subset(mtcars, B %in% A)

# This works
mtcars2 = mtcars[mtcars[,B] %in% A,]

希望这有帮助!