簡體   English   中英

How to use R shiny to filter a specific column from a csv file and extract the data in csv and pdf format

[英]How to use R shiny to filter a specific column from a csv file and extract the data in csv and pdf format

As I am new to R shiny, please go easy on me: I have found this code useful: https://community.rstudio.com/t/download-dataset-filtered-in-shiny-input/75770 . 此代碼根據“物種”列獲取 Iris 數據和過濾器

為了在通過fileInput()上傳自己的數據后得到過濾結果,我對上面的代碼進行了一些調整。 我正在嘗試使用“類型”列過濾數據,但我收到了下面提到的錯誤。

錯誤:

object 'file1' not found

csv 數據:

ID  Type    Range
21  A1     100
22  C1     200
23  E1     300

代碼

library(tidyverse)
library(shiny)
library(DT)
library(shinyWidgets)

ui <- fluidPage(
  #setBackgroundColor(color = c("#66e0ff", "#00a3cc", "#003d4d")),
  h1("Data"),
  
  sidebarLayout(
    sidebarPanel(fileInput("file1", label = "Choose species"),
                 downloadButton("download1","Download entire Table  as csv")),
    mainPanel(h4("Table 1: Iris"),
              dataTableOutput("csv_dto")
    )
  ))

server <- function(input, output, session) {
  
  output$csv_dto <- renderTable({
    file <- input$file1
    ext <- tools::file_ext(file$datapath)
    
    req(file)
    validate(need(ext == "csv", "Please upload a csv file"))
    
    read.csv(file$datapath, header = input$header)
  })
  
  thedata <- reactive({
    file$datapath %>% 
      filter(Type == input$Type)
  })
  
  output$type_dto <- renderDataTable({
    thedata()  %>% 
      datatable(extensions = 'Buttons',
                options = list(
                  #Each letter is a dif element of a datatable view, this makes buttons the last thing that's shown.
                  
                  
                  buttons = c("copy", "csv", "pdf")),
                filter = list(
                  position = 'top'),
                rownames = FALSE)
  })
  
  
  output$download1 <- downloadHandler(
    filename = function() {
      paste("type_", Sys.Date(), ".csv", sep="")
    },
    content = function(file) {
      write.csv(thedata(), file)
    }
  )
}

shinyApp(ui, server)

有人可以幫我解決這個問題嗎?

我無法為您提供 PDF output 的幫助,但要讓您入門:您必須對?fileInput示例中的代碼進行一些調整。

而不是renderTable使用reactive 也不要分配給output 在 UI 中使用dataTableOutput("type_dto")代替dataTableOutput("csv_dto") ")。

library(tidyverse)
library(shiny)
library(DT)
library(shinyWidgets)

ui <- fluidPage(
  # setBackgroundColor(color = c("#66e0ff", "#00a3cc", "#003d4d")),
  h1("Data"),
  sidebarLayout(
    sidebarPanel(
      fileInput("file1", label = "Choose species"),
      downloadButton("download1", "Download entire Table  as csv")
    ),
    mainPanel(
      h4("Table 1: Iris"),
      dataTableOutput("type_dto")
    )
  )
)

server <- function(input, output, session) {
  csv_dto <- reactive({
    file <- input$file1
    ext <- tools::file_ext(file$datapath)

    req(file)
    validate(need(ext == "csv", "Please upload a csv file"))

    read.csv(file$datapath)
  })

  thedata <- reactive({
    csv_dto() %>% 
      filter(Type == input$Type)
  })

  output$type_dto <- renderDataTable({
    thedata() %>%
      datatable(
        extensions = "Buttons",
        options = list(
          # Each letter is a dif element of a datatable view, this makes buttons the last thing that's shown.
          buttons = c("copy", "csv", "pdf")
        ),
        filter = list(
          position = "top"
        ),
        rownames = FALSE
      )
  })

  output$download1 <- downloadHandler(
    filename = function() {
      paste("type_", Sys.Date(), ".csv", sep = "")
    },
    content = function(file) {
      write.csv(thedata(), file)
    }
  )
}

shinyApp(ui, server)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM