簡體   English   中英

R Shiny-使用Selectinput作為子集數據幀的列選擇

[英]R Shiny - Using Selectinput as column selection to subset data frame

我正在使用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)
  })
 })

我想使用某種類型的子集來按列(即input $ filt1)和選中的框(input $ inCheckboxGroup1)過濾data_vals。 我不確定如何執行此操作,因為子集(data_vals,NAME%in%input $ inCheckboxGroup1)正在尋找NAME作為列標題,而不是尋找用戶選擇的輸入。

我嘗試使用:

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

但是,這不會產生表格(空白)。 我還使用了: subset(data_vals, Column1Header %in% input$inCheckboxGroup1) ,它可以工作,所以我知道它不是代碼的復選框部分。

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

我認為您可以通過不使用subset來解決問題,因為您的列名是一個變量。 請參閱以下示例:

A = 1
B ='am'

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

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

因此,在您的情況下,您可以使用:

data_vals = data_vals[data_vals[,input$filt1] %in% input$checkboxGroup1,]

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM