es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo leer un archivo csv en Shiny?

Estoy tratando de crear un tablero elegante que permita al usuario seleccionar un archivo csv. El archivo solo contiene dos columnas que son el número de orden y la fecha de creación. Quiero que el usuario pueda seleccionar además, el rango de fechas que desee y obtener una estadística resumida de recuento.

Hasta ahora, mi código es el siguiente:

biblioteca(brillante)
biblioteca(plotly)
biblioteca(colourpicker)
biblioteca(ggplot2)

ui <- fluidPage(
  titlePanel("Referencias de casos"),
  sidebarLayout(
    panel del sidebar(
      fileInput("file", "Select a file"),
      sliderInput("period", "Periodo de tiempo observado:",
                  min(data()[, c('dateCreated')]), max(data()[, c('dateCreated')]),
                  value = c(min(data[, c('dateCreated')]),max(data()[, c('dateCreated')])))
    ),
    mainPanel(
      DT::dataTableOutput("table")
    )
  )
)

Define la lógica del servidor

servidor <- función(input, output) {

# entrada de archivo
  input_file <- reactivo({
    si (es.null(input$file)) {
      volver("")
    }
  })

# resumiendo datos en cuenta
  data <- input_file()
  data <- subset(data, dateCreated >= input$period[1] & dateCreated <= input$period[2])

  output$table <- DT::renderDataTable({
    data
  })

}

shinyApp(ui = ui, servidor = servidor)

Recibo un mensaje de error que dice:

Error en datos()[, c(&quot;dateCreated&quot;)]: número incorrecto de dimensiones

¿Alguien puede ayudarme a entender cuál podría ser el problema y/o proporcionar un mejor marco para hacer esto? Y para ser claro en el archivo csv, la variable createDate se descompone en días individuales para cuando se realizó el pedido.

¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error ‘Error in data()[, c("dateCreated")] : incorrect number of dimensions‘ ocurre porque la función data() no existe. Para solucionarlo, debes crear un reactiveFileReader para leer el archivo csv y transformar los datos en un dataframe.

    Aquí tienes un código actualizado con comentarios para explicar los cambios:

    library(shiny)
    library(plotly)
    library(colourpicker)
    library(ggplot2)
    
    
    ui <- fluidPage(
      titlePanel("Remisiones de Casos"),
      sidebarLayout(
        sidebarPanel(
          fileInput("file", "Seleccionar archivo"),
          sliderInput("period", "Periodo de tiempo observado:",
                      min(date_subset()$dateCreated), max(date_subset()$dateCreated),
                      value = c(min(date_subset()$dateCreated),max(date_subset()$dateCreated)))
        ),
        mainPanel(
          DT::dataTableOutput("table")
        )
      )
    )
    
    # Definir la lógica del servidor
    server <- function(input, output) {
    
      # Función reactiva para leer el archivo csv y transformarlo en un dataframe
      data <- reactiveFileReader(1000, session, filePath = reactive({
        input$file$datapath
      }), readFunc = reactive({
        # comprobar si se ha seleccionado un archivo
        if (is.null(input$file)) {
          return(NULL)
        }
        # leer el archivo csv y transformarlo en un dataframe
        df <- read.csv(input$file$datapath, header = TRUE, sep = ",")
        df$dateCreated <- as.Date(df$dateCreated, "%Y-%m-%d") # convertir la columna de fecha al formato de fecha
        df
      }))
    
      # resumiendo los datos en recuentos
      date_subset <- reactive({
        data_subset <- subset(data(), dateCreated >= input$period[1] & dateCreated <= input$period[2])
        data_subset
      })
    
      output$table <- DT::renderDataTable({
        date_subset()
      })
    }
    
    shinyApp(ui = ui, server = server)
    

    Aquí, he creado un reactiveFileReader que toma la ruta al archivo de entrada y lee el archivo csv utilizando read.csv(). A continuación, transformé la columna dateCreated en un formato de fecha usando as.Date().

    Para evitar el mensaje de error, creé una función reactiva date_subset() para filtrar los datos según el rango de fecha seleccionado en sliderInput.

    ¡Espero que esto ayude!

Comments are closed.