#r #shiny #shinydashboard #shiny-server #shinyapps
Вопрос:
Я супер новичок в блестящих приложениях и в R. Как бы я добавил кнопку, которая позволяет мне фильтровать переданный набор данных с помощью этого регулярного выражения? Загруженный набор данных будет содержать одни и те же имена столбцов, и столбец, к которому я хочу применить регулярное выражение, будет «close_notes». Я хочу сначала преобразовать этот столбец в строку, все в верхнем регистре, а затем применить регулярное выражение. Заранее большое вам спасибо за вашу помощь!
Регулярное Выражение:
"\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|bbBLANK\b"
Приведенный ниже код предназначен для приложения Shiny. Пожалуйста, дайте мне знать, если что-то покажется неправильным или его следует изменить. Спасибо!
library(shiny)
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),
# Button
downloadButton("downloadData", "Download")
),
mainPanel(
dataTableOutput("contents")
)
)
)
server <- function(input, output) {
datasetInput <- reactive({
req(input$file1)
# input$file1 will be NULL initially. After the user selects
# and uploads a file, it will be a data frame with 'name',
# 'size', 'type', and 'datapath' columns. The 'datapath'
# column will contain the local filenames where the data can
# be found.
inFile <- input$file1
if (is.null(inFile))
return(NULL)
read.csv(inFile$datapath, header = input$header)
})
output$contents <- renderDataTable({
datasetInput()
})
output$downloadData <- downloadHandler(
filename = function() {
paste("myfile",Sys.Date(), ".csv", sep = "")
},
content = function(file) {
write.csv(datasetInput(), file, row.names = FALSE)
}
)
}
shinyApp(ui, server)
Ответ №1:
Вы можете внести некоторые изменения в свой текущий код.
- Используется
reactiveValues
для сохранения загруженных данных, также измененоreactive
наobserve
. - Добавлен
actionButton
фильтр для применения после нажатия кнопки и используетсяobserveEvent
на стороне сервера.
library(shiny)
library(dplyr)
#Define the regex to apply.
regex_to_apply <- "\bMASTER DATA..."
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),
# Button
downloadButton("downloadData", "Download"),
actionButton('apply_regex', 'Apply Regex')
),
mainPanel(
dataTableOutput("contents")
)
)
)
server <- function(input, output) {
rv <- reactiveValues()
observe({
req(input$file1)
# input$file1 will be NULL initially. After the user selects
# and uploads a file, it will be a data frame with 'name',
# 'size', 'type', and 'datapath' columns. The 'datapath'
# column will contain the local filenames where the data can
# be found.
inFile <- input$file1
if (is.null(inFile))
return(NULL)
rv$data <- read.csv(inFile$datapath, header = input$header)
})
output$contents <- renderDataTable({
rv$data
})
output$downloadData <- downloadHandler(
filename = function() {
paste("myfile",Sys.Date(), ".csv", sep = "")
},
content = function(file) {
write.csv(rv$data, file, row.names = FALSE)
}
)
observeEvent(input$apply_regex, {
rv$data <- rv$data %>% filter(grepl(regex_to_apply, toupper(close_notes)))
})
}
shinyApp(ui, server)
Ответ №2:
Вы должны переместить границы слов за пределы чередования, вот так:
b(MASTER DATA|SOURCE LIST|VALIDITY DATES|MRP CONTROLLER|PSV|ELIGIBILITY|COST|MARKETING EXCLUSION|EFFECTIVITY|MISSING|BLANK)b
Комментарии:
1. Я действительно хочу запечатлеть то, что находится внутри, поэтому регулярное выражение, которое у меня есть, правильное. Как бы я добавил это в свое блестящее приложение? Спасибо!