[英]Read zip file containing multiple .csv tables in R shiny app
我正在开发一个 shiny 应用程序来操作数据。 我想阅读在 fileInput 中选择的 zip 文件。 这个 zip 由多个 csv 文件组成,我想保存为反应值 all.csv 数据帧。 For example, if test.zip contains file ONE.csv, TWO.csv, THREE.csv, i'd like to obtain 3 reactives values (as dataframes) called ONE, TWO, THREE.
如果我知道 csv 文件的名称和数量,我就可以做到。
但是如果我不知道.csv数据帧的数量和名称,我该如何实现呢?
## Only run examples in interactive R sessions
if (interactive()) {
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("ZIP", "Choose ZIP File",
accept = ".zip"
)
),
mainPanel(
DT::dataTableOutput("ONEtab")
)
)
)
server <- function(input, output) {
ONE <- reactive({
inFile <-req(input$ZIP)
read_csv(unzip(inFile$datapath,"ONE.CSV"))
})
TWO <- reactive({
inFile <-req(input$ZIP)
read_csv(unzip(inFile$datapath,"TWO.CSV"))
})
THREE <- reactive({
inFile <-req(input$ZIP)
read_csv(unzip(inFile$datapath,"THREE.CSV"))
})
output$ONEtab <- DT::renderDataTable({ DT::datatable(ONE(), option=list(scrollX=T),filter = 'top')})
}
shinyApp(ui, server)
}
谢谢你的帮助 !
一种选择是将所有数据帧读入一个变量,然后使用一个数字 select 感兴趣的一个。 这是一些执行此操作的代码。 它使用lapply
读取 zip 文件的内容,以创建一个名为all
的反应变量。 要引用不同的数据帧,所需的代码是all()[[index]]
,我添加了一些显示这一点的内容。
library(DT)
library(readr)
ui <- fluidPage(sidebarLayout(sidebarPanel(
fileInput("ZIP", "Choose ZIP File", accept = ".zip"),
selectInput("choice", 'Choose', choices = c(1,2,3), selected = 1)
),
mainPanel(DT::dataTableOutput("selectone"))))
server <- function(input, output) {
all <- reactive({
inFile <- req(input$ZIP)
filelist <- unzip(inFile$datapath, list = T)
lapply(filelist$Name, read_csv)
})
output$selectone <-
DT::renderDataTable({
choice = as.integer(input$choice)
DT::datatable(all()[[choice]], option = list(scrollX = T), filter = 'top')
})
}
shinyApp(ui, server)
如果没有处理此代码的 rest,很难知道这是否是您所需要的,但也许这是一个开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.