Значения внутри `valueBox` не изменяются при изменении диапазона дат - PullRequest
0 голосов
/ 04 февраля 2020

Я смог использовать tidyverse для изменения значений во фрейме данных при изменении диапазона дат, но мои суммарные значения в полях значений не меняются.

df <- data.frame("Ship Date" = c("2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04"),
                 "Revenue" = c(100, 200, 300, 400), "Load Volume" = c(10, 12, 14, 18))

ui <- fluidPage(
  dateRangeInput(
    inputId = "daterange",
    label = "Select the date range",
    start = min(df$`Ship Date`),
    end = max(df$`Ship Date`),
    min = min(df$`Ship Date`),
    max = max(df$`Ship Date`),
    format = "yyyy/mm/dd",
   separator = "-" 
  ),
  textOutput("startdate"),
  textOutput("enddate"),
  textOutput("range"),
dashboardbody(
  fluidRow(box(valueBoxOutput("totalrevenue"), title = "Revenue")
  ,box(valueBoxOutput("revperload"), title = "Revenue Per Load")
))

server <- function(input, output, session) ({
 total.revenue <- dollar(sum(df$Revenue)
 rev.perload <- dollar(sum(df$Revenue) / sum(df$`Load Volume`))
# date range
output$startdate <- renderText({
    as.character(input$daterange[1])
  })
  output$enddate <- renderText({
    as.character(input$daterange[2])
  })
  output$range <- renderText({
    paste("Selected date range is ", input$daterange[1], "to", input$daterange[2])
  })
output$totalrevenue <- renderValueBox({
    total.revenue = subset(df, df$`Ship Date` >= input$daterange[1] & df$`Ship Date`<=input$daterange[2])
    valueBox(
      formatC(total.revenue, format = "d", big.mark = ',')
      ,paste(NULL)
    )
  })
output$revperload <- rendervalueBox({
    rev.perload = subset(df, df$`Ship Date` >= input$daterange[1] & df$`Ship Date` <= input$daterange[2])
    valueBox(
      formatC(total.revenue, format = "d", big.mark = ',')
      ,paste(NULL)
    )
   })
})

shinyApp(ui, server)

Два значения поля не реагируют на изменение диапазона дат на панели инструментов.

1 Ответ

0 голосов
/ 04 февраля 2020

См. Ниже:

df <- data.frame("Ship Date" = c("2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04"),
                 "Revenue" = c(100, 200, 300, 400), "Load Volume" = c(10, 12, 14, 18), stringsAsFactors = FALSE)

ui <- fluidPage(
  titlePanel("StackOverFlow Example"),

  sidebarLayout(

    sidebarPanel(
      dateRangeInput(
        inputId = "daterange",
        label = "Select the date range",
        start = min(df$Ship.Date),
        end = max(df$Ship.Date),
        min = min(df$Ship.Date),
        max = max(df$Ship.Date),
        format = "yyyy/mm/dd",
        separator = "-" 
      ),
      textOutput("startdate"),
      textOutput("enddate"),
      textOutput("range")
    ),

    mainPanel(
      box(
        title = "Revenue",
        valueBoxOutput("totalrevenue")
      ),
      box(
        title = "Revenue Per Load",
        valueBoxOutput("revperload")
      )
    )
  )
)

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

  # date range
  output$startdate <- renderText({as.character(input$daterange[1])})

  output$enddate <- renderText({as.character(input$daterange[2])})

  output$range <- renderText({paste("Selected date range is ", input$daterange[1], "to", input$daterange[2])})


  #KPI Boxes
  output$totalrevenue <- renderValueBox({

    temp <- df[df$Ship.Date >= input$daterange[1] & df$Ship.Date <= input$daterange[2],]

    total.revenue <- dollar(sum(temp$Revenue))

    valueBox(
      formatC(total.revenue, format = "d", big.mark = ',')
      ,paste(NULL)
    )
  })

  output$revperload <- renderValueBox({

    temp <- df[df$Ship.Date >= input$daterange[1] & df$Ship.Date <= input$daterange[2],]

    rev.perload <- dollar(sum(temp$Revenue) / sum(temp$Load.Volume))

    valueBox(
      formatC(rev.perload, format = "d", big.mark = ',')
      ,paste(NULL)
    )
  })
})

shinyApp(ui, server)
...