# R pakcages
library(shiny)
library(dplyr)
# data preps
data(storms)
storms_by_year <- storms |>
group_by(year) |>
summarize(n = n_distinct(name))
storms_by_year_wide <-storms |>
mutate(year = as.integer(year)) |>
group_by(year) |>
summarize(n = n_distinct(name)) |>
filter(year %% 5 == 0) |>
pivot_wider(names_from = year, values_from = n)
# ui
ui <- fluidPage(
)
# server
server <- function(input, output, session) {
}
shinyApp(ui, server)Shiny Exercise 3
Display Number of Storms by Year
Goal: Display Number of Storms by Year.
Add a table output element to the ui and a corresponding renderer to the server. The table should display the number of named storms in each year.
Add a plot output element to the ui, and a corresponding renderer to the server. The plot should display the number of named storms in each year.
Click to Check the Complete Shiny App Code!
# R packages
library(shiny)
library(tidyverse)
# data preps
data(storms)
storms_by_year <- storms |>
group_by(year) |>
summarize(n = n_distinct(name))
storms_by_year_wide <-storms |>
mutate(year = as.integer(year)) |>
group_by(year) |>
summarize(n = n_distinct(name)) |>
filter(year %% 5 == 0) |>
pivot_wider(names_from = year, values_from = n)
# ui
ui <- fluidPage(
# 1. byYearTable
tableOutput("byYearTable"),
# 2. byYearPlot
plotOutput("byYearPlot")
)
server <- function(input, output, session) {
# 1. byYearTable
output$byYearTable <- renderTable({
storms_by_year_wide
})
# 2. byYearPlot
output$byYearPlot <- renderPlot({
ggplot(data = storms_by_year) +
geom_line(aes(x = year, y = n)) +
labs(x = "Year",
y = "Number of Storms") +
theme_minimal() +
theme(axis.title.x = element_text(size = rel(2),
margin
= margin(30,0,0,0)),
axis.title.y = element_text(size = rel(2),
margin
= margin(0,30,0,0)),
axis.text.x = element_text(size = rel(2)),
axis.text.y = element_text(size = rel(2)))
})
}
shinyApp(ui, server)