读取r中的csv文件(超过1个),并为文件名创建新列

读取r中的csv文件(超过1个),并为文件名创建新列,r,dataframe,csv,shiny,upload,R,Dataframe,Csv,Shiny,Upload,我想上传多个*.csv文件,重新绑定它们,并用原始csv文件名创建名为Filename的新列 使用basename()函数,我只应用于获取临时文件名,而不是原始文件名 input$datafile$name获取原始文件名,但我不确定如何从该名称中变异新列 下面是我的代码供参考 library(shiny) library(data.table) library(dplyr) options(shiny.maxRequestSize = 10000*1024^2) ui <- shiny

我想上传多个*.csv文件,重新绑定它们,并用原始csv文件名创建名为Filename的新列

使用basename()函数,我只应用于获取临时文件名,而不是原始文件名

input$datafile$name获取原始文件名,但我不确定如何从该名称中变异新列

下面是我的代码供参考

library(shiny)
library(data.table)
library(dplyr)

options(shiny.maxRequestSize = 10000*1024^2)

ui <- shinyUI(
fluidPage(
titlePanel("Example Read and Merge with new Column for Filename"),
sidebarLayout(
  sidebarPanel( fileInput("datafile", h5("Choose CSV file:"),
                          accept = ".csv",multiple = TRUE)),
  mainPanel(DT::dataTableOutput("Raw_data_show"),
            verbatimTextOutput("results"),textOutput("filechosen"))
)))

server <- function(session,input, output) {

path <- reactiveValues(pth=NULL)

observeEvent(input$filechoose,{
path$pth <- file.choose()
})

output$filechosen <- renderText({

if(is.null(path$pth)){
  return()
}else{
  dirname(path$pth)
}
})

rawData <- reactiveValues(site = NULL)                               

observeEvent(input$datafile, { 
req(input$datafile)

  rawData$site <- input$datafile$datapath%>%
  purrr::map_df(~fread(.x)%>%mutate(FileName_2D = basename(.x)))

})

output$results = renderPrint({
input$datafile$name
print(paste("First File (input$datafile$name)[[1]])",(input$datafile$name)[[1]]))
print(paste("2nd File (input$datafile$name)[[2]])",(input$datafile$name)[[2]]))    
})

output$Raw_data_show <- DT::renderDataTable({
rawData$site
})

}

shinyApp(ui, server)
库(闪亮)
库(数据表)
图书馆(dplyr)
选项(shinny.maxRequestSize=10000*1024^2)

ui您可以使用
input$datafile$datapath
读取文件,并使用
input$datafile$name
添加具有文件名的新列。使用
map2_df
将两个值一起传递并合并到一个数据集

library(shiny)
library(tidyverse)
library(data.table)

ui <- shinyUI(
  fluidPage(
    titlePanel("Example Read and Merge with new Column for Filename"),
    sidebarLayout(
      sidebarPanel( fileInput("datafile", h5("Choose CSV file:"),
                              accept = ".csv",multiple = TRUE)),
      mainPanel(DT::dataTableOutput("Raw_data_show"),
                verbatimTextOutput("results"),textOutput("filechosen"))
    )))

server <- function(session,input, output) {
  
  path <- reactiveValues(pth=NULL)
  
  observeEvent(input$filechoose,{
    path$pth <- file.choose()
  })
  
  output$filechosen <- renderText({
    
    if(is.null(path$pth)){
      return()
    }else{
      dirname(path$pth)
    }
  })
  
  rawData <- reactiveValues(site = NULL)                               
  
  observeEvent(input$datafile, { 
    req(input$datafile)
    rawData$site <- map2_df(input$datafile$name, input$datafile$datapath, 
                          ~fread(.y)%>% mutate(FileName_2D = .x))
    
    
  })
  
  output$Raw_data_show <- DT::renderDataTable({
    rawData$site
  })
  
}

shinyApp(ui, server)
库(闪亮)
图书馆(tidyverse)
库(数据表)
用户界面