You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用正则表达式过滤Shiny App中的数据集

Adding a Regex Filter Button to Your Shiny App

Hey there! Let's walk through fixing this up for you. First off, your existing Shiny code is perfectly functional—it handles CSV uploads, displays the data, and supports downloads without any obvious bugs. Now let's add that regex-based filter button you need.

Step 1: Update the UI to Add the Filter Button

We'll add an actionButton to the sidebar panel, right below the header checkbox. This button will trigger the filtering action when clicked.

Step 2: Modify the Server Logic to Handle Filtering

We need to:

  • Create a reactive expression that holds the filtered dataset, triggered by either the uploaded data changing or the filter button being clicked.
  • Use grepl() with your specified regex (note: in R, we need double backslashes \\b instead of single ones for word boundaries) to check the close_notes column.
  • Update the data table display and download handler to use this filtered dataset instead of the raw uploaded data.

Full Modified Code

Here's the complete updated code with comments explaining each change:

library(shiny)
library(DT) # Optional but improves datatable functionality

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      fileInput("file1", "Choose CSV File",
                accept = c(
                  "text/csv",
                  "text/comma-separated-values,text/plain",
                  ".csv"
                )),
      tags$hr(),
      checkboxInput("header", "Header", TRUE),
      # Add the filter trigger button
      actionButton("filterBtn", "Filter Data with Regex"),
      tags$hr(),
      downloadButton("downloadData", "Download")
    ),
    mainPanel(
      dataTableOutput("contents")
    )
  )
)

server <- function(input, output) {
  # Reactive expression for raw uploaded dataset
  datasetInput <- reactive({
    req(input$file1)
    inFile <- input$file1
    read.csv(inFile$datapath, header = input$header)
  })
  
  # Reactive expression for filtered dataset (triggers on button click or new upload)
  filteredData <- eventReactive(c(input$filterBtn, datasetInput()), {
    req(datasetInput())
    data <- datasetInput()
    
    # Your regex pattern (updated with R-compatible double backslashes)
    regex_pattern <- "\\bMASTER DATA\\b|\\bSOURCE LIST\\b|\\bVALIDITY DATES\\b|\\bMRP CONTROLLER\\b|\\bPSV\\b|\\bELIGIBILITY\\b|\\bCOST\\b|\\bMARKETING EXCLUSION\\b|\\bEFFECTIVITY\\b|\\bMISSING\\b|\\bBLANK\\b"
    
    # Filter rows where close_notes matches the regex
    # Add ignore.case = TRUE if you want case-insensitive matching (optional)
    filtered <- data[grepl(regex_pattern, data$close_notes, perl = TRUE), ]
    
    return(filtered)
  })
  
  # Display raw data initially, switch to filtered after button click
  output$contents <- renderDataTable({
    if(input$filterBtn == 0) {
      datasetInput()
    } else {
      filteredData()
    }
  })
  
  # Update download to use filtered data when available
  output$downloadData <- downloadHandler(
    filename = function() {
      paste(if(input$filterBtn == 0) "myfile" else "filtered_myfile", Sys.Date(), ".csv", sep = "")
    },
    content = function(file) {
      data_to_download <- if(input$filterBtn == 0) datasetInput() else filteredData()
      write.csv(data_to_download, file, row.names = FALSE)
    }
  )
}

shinyApp(ui, server)

Key Notes:

  • eventReactive ensures the filtered dataset only recalculates when you click the filter button or upload new data—this keeps the app efficient.
  • The regex uses \\b instead of \b because R requires escaping backslashes in string literals.
  • The data table shows raw data by default, and switches to filtered data after the button is clicked. Uploading a new file resets this to raw.
  • perl = TRUE in grepl() ensures reliable handling of word boundaries in the regex.
  • The download filename includes "filtered" when you download the filtered dataset, so you can easily tell the difference.

内容的提问来源于stack exchange,提问作者Jasmine Dogu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 21:04:09