R Shiny: символ в формате даты - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь разработать приложение Shiny, способное получать файл .csv и выполнять прогноз. Во-первых, мне нужно импортировать 2 CSV-файла и преобразовать столбец Дата из символов в формат даты. Их, преобразуйте фрейм данных в объект tsibble для запуска прогноза.

В сценарии R это просто, я бы импортировал файл, а они просто используют:

data$Date <- ymd(data$Date)
dados = as_tsibble(data,index = Date)

Но это не работает Я перепробовал много разных подходов, в том числе тот, который был в коде, но я продолжаю получать error evaluation nested too deeply: infinite recursion/options (expressions=)?, где это должен быть фрейм данных с информацией str().

Ожидаемый результат - таблица с такой информацией:

> str(data)
'data.frame':   975 obs. of  13 variables:
 $ Date            : Date, format: "2017-05-01" "2017-05-02" "2017-05-03" "2017-05-04" ...
 $ Demand          : int  122 124 113 124 126 114 100 121 118 135 ...

Я не могу придумать никакого решения. Любое предложение?

Мой код:

**UI.R**
   library(shiny)
   library(shinydashboard)
   library(fpp3)
   library(fasster)

dashboardPage(
  dashboardHeader( title = "DEMO Forecast"),
  dashboardSidebar(
    sidebarMenu(
      menuItem("Data",tabName = "Data"),
      menuItem("Analysis", tabName = "Analysis")
    )
  ),

  dashboardBody(
    tabItems(
      tabItem(tabName = "Data",
              fluidRow(
                box(title = "Enter the ED demand file",
                    #INPUT
                    fileInput("file", label = "Choose .csv file",
                              multiple = FALSE, accept = ".csv",
                              buttonLabel = "Browse")
                ),
                box(title = "Enter the ED external data file",
                    #INPUT
                    fileInput("file_extra", label = "Choose .csv file",
                              multiple = FALSE, accept = ".csv",
                              buttonLabel = "Browse")
                )
              ),
              fluidRow(
                #OUTPUT
                box(width = 12, tableOutput("table_data"))
              )
      ),
      tabItem(tabName = "Analysis",
              fluidRow(
                box(title = "Date format",
                    #INPUT
                    selectInput ("date_format", h5("Date format"),
                                 choices = list("ymd", "mdy", "dmy", "ydm")),
                    h5("y = year, m = month, d = day"),
                ),

                #OUTPUT
                box(title = "Accuracy Measures", width = 12,
                    tableOutput("table_erro")
                )
              )

      )
    )
  )
)

server.R

library(shiny)
library(shinydashboard)
library(fpp3)
library(fasster)

shinyServer(
  function(input,output){

    #Import ED demand data
    data = reactive({
      file1 = input$file
      if(is.null(file1)){return()}
      read.csv(file1$datapath,header = TRUE, sep = ",",
               stringsAsFactors = FALSE, dec = ".", na.strings = " ")
    })

    data <- eventReactive(input$date_format,{
      switch (input$date_format,{
        "ymd" = ymd(data()$Date)
        "ydm" = ydm(data()$Date)
      })
    })

    #Import extra data
    data_extra = reactive({
      file_extra = input$file_extra
      if(is.null(file_extra)){return()}
      read.csv(file_extra$datapath, header = TRUE, sep = ",",
               stringsAsFactors = FALSE, dec = ".", na.strings = " ")
    })

    output$table_data = renderTable({
      if(is.null(data())){return()}
      str(data())
    })

  }
)

1 Ответ

0 голосов
/ 26 марта 2020

После многих неудачных попыток мне удалось решить эту проблему с помощью этого кода:

#Change date format 
data_final = reactive({
datas = data()$Date #auxiliary vector 
datas = ymd(datas)
df = data() #auxiliary data frame
df$Date = datas
as_tsibble(df, index = Date)
})

В основном я создаю вспомогательный вектор (datas) со столбцом Date и преобразую его в формат даты. Их я скопировал таблицу данных в другую вспомогательную переменную (df) и обновил столбец Дата с вектором datas. Наконец, я конвертирую df в объект tsibble. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...