/sections/content_plots/plot_doublingTime.R

https://github.com/chschoenenberger/covid19_dashboard · R · 56 lines · 51 code · 5 blank · 0 comment · 6 complexity · 4c4708bfa58e02cc98756221c9c5a58a MD5 · raw file

  1. output$selectize_doublingTime_Country <- renderUI({
  2. selectizeInput(
  3. "selectize_doublingTime_Country",
  4. label = "Select Countries",
  5. choices = unique(data_evolution$`Country/Region`),
  6. selected = top5_countries,
  7. multiple = TRUE
  8. )
  9. })
  10. output$selectize_doublingTime_Variable <- renderUI({
  11. selectizeInput(
  12. "selectize_doublingTime_Variable",
  13. label = "Select Variable",
  14. choices = list("Confirmed" = "doublingTimeConfirmed", "Deceased" = "doublingTimeDeceased"),
  15. multiple = FALSE
  16. )
  17. })
  18. output$plot_doublingTime <- renderPlotly({
  19. req(input$selectize_doublingTime_Country, input$selectize_doublingTime_Variable)
  20. daysGrowthRate <- 7
  21. data <- data_evolution %>%
  22. pivot_wider(id_cols = c(`Province/State`, `Country/Region`, date, Lat, Long), names_from = var, values_from = value) %>%
  23. filter(if (input$selectize_doublingTime_Variable == "doublingTimeConfirmed") (confirmed >= 100) else (deceased >= 10)) %>%
  24. filter(if (is.null(input$selectize_doublingTime_Country)) TRUE else `Country/Region` %in% input$selectize_doublingTime_Country) %>%
  25. group_by(`Country/Region`, date) %>%
  26. select(-recovered, -active) %>%
  27. summarise(
  28. confirmed = sum(confirmed, na.rm = T),
  29. deceased = sum(deceased, na.rm = T)
  30. ) %>%
  31. arrange(date) %>%
  32. mutate(
  33. doublingTimeConfirmed = round(log(2) / log(1 + (((confirmed - lag(confirmed, daysGrowthRate)) / lag(confirmed, daysGrowthRate)) / daysGrowthRate)), 1),
  34. doublingTimeDeceased = round(log(2) / log(1 + (((deceased - lag(deceased, daysGrowthRate)) / lag(deceased, daysGrowthRate)) / daysGrowthRate)), 1),
  35. ) %>%
  36. mutate("daysSince" = row_number()) %>%
  37. filter(!is.na(doublingTimeConfirmed) | !is.na(doublingTimeDeceased))
  38. p <- plot_ly(data = data, x = ~daysSince, y = data[[input$selectize_doublingTime_Variable]], color = ~`Country/Region`, type = 'scatter', mode = 'lines')
  39. if (input$selectize_doublingTime_Variable == "doublingTimeConfirmed") {
  40. p <- layout(p,
  41. yaxis = list(title = "Doubling time of confirmed cases in days"),
  42. xaxis = list(title = "# Days since 100th confirmed case")
  43. )
  44. } else {
  45. p <- layout(p,
  46. yaxis = list(title = "Doubling time of deceased cases in days"),
  47. xaxis = list(title = "# Days since 10th deceased case")
  48. )
  49. }
  50. return(p)
  51. })