首页 > 解决方案 > 如何在 Shiny 应用程序中正确格式化数据集?

问题描述

到目前为止,我已经能够得到它,以便用户可以将数据上传到闪亮的应用程序(动态上传)。我怎样才能得到它,以便上传的数据框格式正确(见下面的链接)。我相信我想使用的库是 DT,但我对其他选择持开放态度。代码如下

## Only run examples in interactive R sessions
if (interactive()) {

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)
    ),
    mainPanel(
      tableOutput("contents")
    )
  )
)

server <- function(input, output) {
  output$contents <- renderTable({
    # 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)
  })
}

shinyApp(ui, server)
}

这就是我希望上传的数据集对用户显示的样子

标签: rshinyshinydashboardshinyapps

解决方案


您可以使用renderDataTabledataTableOutput

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)
    ),
    mainPanel(
      dataTableOutput("contents")
    )
  )
)

server <- function(input, output) {
  output$contents <- renderDataTable({
    # 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)
  }, options = list(pageLength = 5))
}

shinyApp(ui, server)

您也可以尝试DT具有同名功能的包。与DT::renderDataTable和一起使用DT::dataTableOutput


推荐阅读