Как поместить загруженный файл в диапазон дат в блестящем приложении - PullRequest
0 голосов
/ 01 мая 2020

У меня есть блестящее приложение ниже, в котором пользователь загружает файл, и диапазон дат передается в dateRangeInput(). Затем на основе выбора диапазона дат происходит второе подмножество, которое передает уникальные значения 4-го столбца загруженного набора данных в pickerInput(). Но когда я пытаюсь сделать это, pickerInput выводит сообщение «Ничего не выбрано».

мой csv выглядит так:

A tibble: 375 x 4
   EventDate       month  week day  
   <date>     <dbl> <dbl> <ord>
 1 2017-01-01     1     1 Sun  
 2 2017-01-02     1     1 Mon  
 3 2017-01-03     1     1 Tue  
 4 2017-01-04     1     1 Wed  
 5 2017-01-05     1     1 Thu  
 6 2017-01-06     1     1 Fri  
 7 2017-01-07     1     1 Sat  
 8 2017-01-08     1     2 Sun  
 9 2017-01-09     1     2 Mon  
10 2017-01-10     1     2 Tue 

app

    # app.R ##
library(shiny)
library(DT)
library(shinyWidgets)
ui <- pageWithSidebar(
  headerPanel('Iris k-means clustering'),
  sidebarPanel(
    fileInput("file1", "Choose CSV File",
              accept = c(
                "text/csv",
                "text/comma-separated-values,text/plain",
                ".csv")
    ),
    uiOutput("dates"),
    uiOutput("id")

  ),
  mainPanel(
  )
)

server <- function(input, output, session) {

  output$dates<-renderUI({

    inFile <- input$file1
    df<-data.frame(read.csv(inFile$datapath, header = TRUE))
    df$EventDate <-as.Date(df$EventDate, "%Y-%m-%d")

    dateRangeInput('dateRange',
                   label = 'Date range Input',
                   start = min(df$EventDate) ,end= max(df$EventDate) 
    )

  })
  output$id<-renderUI({
    inFile <- input$file1
    df<-data.frame(read.csv(inFile$datapath, header = TRUE))
    df<-data.frame(subset(df, EventDate>=as.Date(input$dateRange[1], "%Y-%m-%d")&EventDate<=as.Date(input$dateRange[2], "%Y-%m-%d")))

    pickerInput("select", "Select ID", 
                choices = as.character(unique(df[,4])), 
                multiple = T,options = list(`actions-box` = TRUE),
                selected = as.character(unique(df[,4])))
  })

}

shinyApp(ui = ui, server = server)

1 Ответ

1 голос
/ 01 мая 2020

Ваша проблема в subset из df внутри output$id.

Вы конвертируете input$dateRange с as.Date, но вы не конвертируете EventDate из фактора.

Если вы измените эту строку на эту, вы должны быть в бизнесе.

df<-data.frame(subset(df, as.Date(EventDate)>=as.Date(input$dateRange[1], "%Y-%m-%d") & 
                          as.Date(EventDate)<=as.Date(input$dateRange[2], "%Y-%m-%d")))

enter image description here

Это было легко найти, просто добавив browser() в этом вызове renderUI и увидев, что df имеет 0 строк .

Кроме того, это не тот вопрос, который вы задали, но я заметил, что вы прочитали файл .csv дважды. Вы можете переместить это за пределы renderUI и вместо этого присвоить ему реактивное значение. Тогда вы можете observe дважды.

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