X Tutup

Tasks

  • Write a .Rmd script to perform the following tasks
  • Use an API to access NOAA Storm data over the web
  • Intersect the storms with US states to quantify how many storms in the database have hit each state.

Libraries & Data

library(sf)
library(tidyverse)
library(ggmap)
library(rnoaa)
library(spData)
data(world)
data(us_states)

Objective

In this case study you will download storm track data from NOAA, make a summary plot, and quantify how many storms have hit each of the United States. This will require you to use a spatial join (st_join).

Your goal

Your desired figure looks something like the following:

Calculate a table of the five states that have experienced the most storms.
NAME storms
Florida 74
Georgia 45
North Carolina 45
Texas 45
Alabama 36

Steps

  1. Use the API to Download storm data
    • Use storm_shp() for basin = "NA"
    • Read the points in with storm_shp_read()
    • Convert to sf format with st_as_sf()
  2. Wrangle the data
    • Filter to storms 1950-present with filter()
    • Use mutate_if() to convert -999.0 to NA in all numeric columns with the following command from the dplyr package: mutate_if(is.numeric, function(x) ifelse(x==-999.0,NA,x))
    • Use the following command to add a column for decade: mutate(decade=(floor(year/10)*10))
    • Use st_bbox() to identify the bounding box of the storm data and save this as an object called region.
  3. Make the first plot
  • Use ggplot() to plot the world polygon layer and add the following:
  • add facet_wrap(~decade) to create a panel for each decade
  • add stat_bin2d(data=storms, aes(y=st_coordinates(storms)[,2], x=st_coordinates(storms)[,1]),bins=100)
  • use scale_fill_distiller(palette="YlOrRd", trans="log", direction=-1, breaks = c(1,10,100,1000)) to set the color ramp
  • use coord_sf(ylim=region[c(2,4)], xlim=region[c(1,3)]) to crop the plot to the region.
  1. Calculate table of the five states with most storms.
    • use st_transform to reproject us_states to the reference system of the storms object (you can extract a CRS from a sf object with st_crs(storms)
    • Perform a spatial join between the storm database and the states object with: storm_states <- st_join(storms, states, join = st_intersects,left = F). This will ’add` the state to any storm that was recorded within that state.
    • Use group_by(NAME) to group the next step by US state (beware that there is NAME for name of state and Name for name of storm. storm_states
    • use summarize(storms=length(unique(Name))) to count how many unique storms occurred in each state.
    • use arrange(desc(storms)) to sort by the number of storms in each state
    • use slice(1:5) to keep only the top 5 states ```

Try to replicate the following graphic using the data you transformed above.

Can you sort the rows (states) in order of storm frequency (instead of alphabetical?



X Tutup