TimStats/CSVCombiner
0
1library(shiny)2library(data.table)3library(dplyr)4library(shinycssloaders)5options(shiny.maxRequestSize = 100000 * 1024^2)6ui <- fluidPage(7 titlePanel("CSV File Combiner"),8 sidebarLayout(9 sidebarPanel(10 fileInput("file_input", "Choose CSV Files", multiple = TRUE, accept = c("text/csv", ".csv")),11 actionButton("combine_button", "Combine Files"),12 br(),13 br(),14 downloadButton("download_data", "Download Combined CSV")15 ),16 mainPanel(17 withSpinner(tableOutput("preview_table"))18 )19 )20)21 22server <- function(input, output, session) {23 combined_data <- reactiveVal(NULL)24 25 observeEvent(input$combine_button, {26 req(input$file_input)27 28 withProgress(message = 'Combining files', value = 0, {29 combined <- data.frame()30 31 for (i in 1:nrow(input$file_input)) {32 file <- input$file_input$datapath[i]33 data <- fread(file)34 combined <- rbind(combined, data)35 36 incProgress(1/nrow(input$file_input), detail = paste("Processing file", i))37 }38 39 combined_data(combined)40 })41 })42 43 output$preview_table <- renderTable({44 req(combined_data())45 head(combined_data(), 10)46 })47 48 output$download_data <- downloadHandler(49 filename = function() {50 paste("combined_data_", Sys.Date(), ".csv", sep = "")51 },52 content = function(file) {53 write.csv(combined_data(), file, row.names = FALSE)54 }55 )56}57 58shinyApp(ui = ui, server = server)