Имена столбцов на основе значений Shiny dateRangeInput - PullRequest
0 голосов
/ 26 июня 2018

Ниже у меня есть базовый код для блестящего приложения, которое я создаю. Я хочу взять загруженный пользователем файл, разделить набор данных на два раздела - один для первого введенного диапазона дат, а второй для второго. Затем вычислите суммы для другого столбца в наборе данных на основе этих периодов времени. Я могу заставить все это работать, но мой вопрос заключается в том, могу ли я как-то использовать входные данные $ daterange1 и входные данные $ daterange2 для заголовков столбцов таблицы данных, чтобы пользователь знал, какие суммы связаны с какими периодами времени. Итак, ниже, могу ли я как-то изменить "Sum 1" и "Sum 2" на введенные пользователем диапазоны дат?

ui <- fluidPage(
sidebarLayout(
 sidebarPanel(
  fileInput("file1", "Choose CSV File",
            accept=".csv"),
  dateRangeInput("daterange1", "Specify First Date Range", start="2016-12-06", end=Sys.Date()),
  dateRangeInput("daterange2", "Specify Second Date Range", start=(Sys.Date()-30), end=Sys.Date(),
                 min="2016-12-06", max=Sys.Date()),
  actionButton("submit", "Submit"),
  width=3
),

mainPanel(
  tabsetPanel(
    tabPanel("Sum", DT::dataTableOutput("tab"), downloadButton("dltab", "Download"))
 )
)

Сервер

server <- function(input, output, session) {
   observeEvent(input$submit,{
   file1=input$file1
   if (is.null(file1)){
      return(NULL)
  }
  df<-read.csv(file1$datapath, fileEncoding = "UTF-8-BOM")
  df$FAIL<-ifelse(df$OPERATION_STATUS %in% "FAIL",1,0)
df$CATEGORY<-sub("\\s+\\d+", "", df$CRIT_CODE)
df$DATE<-as.Date(df$DATE)

audit<-df
setDT(audit)
audit[,group_o := DATE >= as.Date(input$daterange1[1]) & DATE <= as.Date(input$daterange1[2])]
audit[,group_i := DATE >= as.Date(input$daterange2[1]) & DATE <= as.Date(input$daterange2[2])]
dt<-(audit[, .(
  "Sum 1" = sum(OPERATION_STATUS[group_o]),
  "Sum 2" = sum(OPERATION_STATUS[group_i]),
  "Difference of Sums" = (sum(OPERATION_STATUS[group_o]) - sum(OPERATION_STATUS[group_i])),
  keyby = .("Area" = CRIT_CODE)])
output$tab<-DT::renderDataTable({
  datatable(dt)
})

1 Ответ

0 голосов
/ 26 июня 2018

Нам нужно создать реактивные переменные, как показано ниже, а затем, как только файл был загружен, использовать эти переменные в качестве имен столбцов.

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

  colA <- NULL
  colB <- NULL

 makeReactiveBinding("colA")
 makeReactiveBinding("colB")

  observeEvent(input$daterange1, { 
    colA<<-input$daterange1
    colA<<-paste(colA[1],"-",colA[2])
    colA<<-as.character(colA)
    print(colA)
    })

  observeEvent(input$daterange2, { 
    colB<<-input$daterange2
    colB<<-paste(colB[1],"-",colB[2])
    colB<<-as.character(colB)
    print(colB)
  })


observeEvent(input$submit, { .......
  names(dt)<-c(colA,colB)

})

}

Обратите внимание, что input$daterange1/2 даст нам две переменные, потому что это диапазон. Поэтому мы вставляем первый и второй элемент colA/B, чтобы получить диапазон дат в одну строку символов.

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