We are going to start by loading the necessary libraries. Packages used in this analysis are: dplyr, R.utils, tidyverse, ggplot2 and patchwork. Then we will download and unzip the data frame from the provided URL. After this, we will start the process of cleaning and transforming data, which will be explained later.
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(R.utils)
## Warning: package 'R.utils' was built under R version 4.0.4
## Loading required package: R.oo
## Loading required package: R.methodsS3
## R.methodsS3 v1.8.1 (2020-08-26 16:20:06 UTC) successfully loaded. See ?R.methodsS3 for help.
## R.oo v1.24.0 (2020-08-26 16:11:58 UTC) successfully loaded. See ?R.oo for help.
##
## Attaching package: 'R.oo'
## The following object is masked from 'package:R.methodsS3':
##
## throw
## The following objects are masked from 'package:methods':
##
## getClasses, getMethods
## The following objects are masked from 'package:base':
##
## attach, detach, load, save
## R.utils v2.10.1 (2020-08-26 22:50:31 UTC) successfully loaded. See ?R.utils for help.
##
## Attaching package: 'R.utils'
## The following object is masked from 'package:utils':
##
## timestamp
## The following objects are masked from 'package:base':
##
## cat, commandArgs, getOption, inherits, isOpen, nullfile, parse,
## warnings
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.0.4
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.3 v purrr 0.3.4
## v tibble 3.0.4 v stringr 1.4.0
## v tidyr 1.1.2 v forcats 0.5.1
## v readr 1.4.0
## Warning: package 'forcats' was built under R version 4.0.4
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x tidyr::extract() masks R.utils::extract()
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(ggplot2)
library(patchwork)
## Warning: package 'patchwork' was built under R version 4.0.5
setwd("~/R_Data/Reproducible")
st_data <- "repdata_data_StormData.csv.bz2"
if (!file.exists(st_data)) {
download.file("https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2",
st_data)}
if (!file.exists("repdata_data_StormData.csv")) {
bunzip2(st_data, remove = FALSE, skip = TRUE)
}
## Read an assign CSV file to R Data frame
stormdf <- read.csv("repdata_data_StormData.csv")
At a first glance of the data frame some variables seem to have no significant data. We are going to verify this now.
u_COUNTY_END <- unique(stormdf$COUNTY_END)
U_COUNTYENDN <- unique(stormdf$COUNTYENDN)
print(u_COUNTY_END) ### all values are = "0"
## [1] 0
print(U_COUNTYENDN) ### all values are = NA
## [1] NA
We also notice, there are other variables that do not seem relevant to our analysis. It is convenient to delete those variables from the data set, as this will improve the proccesing time of the analysis. We
storm_cl <- select(stormdf, !c(COUNTY_END, COUNTYENDN)) ### Start cleaning process
storm_cl <- select(storm_cl, !c(END_DATE, END_TIME, END_RANGE, END_AZI, END_LOCATI, LENGTH,
WIDTH, F, ZONENAMES, LATITUDE, LONGITUDE, LATITUDE_E,
LONGITUDE_, REMARKS))
storm_cl <- select(storm_cl, !c(BGN_RANGE, BGN_AZI, BGN_LOCATI)) ### not much info
storm_cl <- select(storm_cl, !c(STATE__)) ### not useful
storm_cl <- select(storm_cl, !c(TIME_ZONE, COUNTY, COUNTYNAME)) ### not useful
storm_cl <- select(storm_cl, !c(WFO, STATEOFFIC)) ### not useful, incomplete
Once we cleaned up a bit, lets transform classes for date variables.
storm_cl <- mutate(storm_cl, BGN_DATE = as.Date(BGN_DATE, "%m/%d/%Y"))
By exploring the types in the variable EVTYPE we can have an idea of the work we have to do to tackle que questions.
evtypes <- unique(storm_cl$EVTYPE)
length(evtypes)
## [1] 985
There are almost 1k different types in the observations. Though there only 48 types according to the data base meta data. We are going to perform some strategies to clean up the data frame prior to the analysis.
It would be a lot easier for us if upper and lower case use is normalized. First of all, we are going to change everything to upper case.
storm_cl <- mutate(storm_cl, EVTYPE = str_to_upper(EVTYPE))
Secondly, let us get rid of white space
storm_cl <- mutate(storm_cl, EVTYPE = trimws(storm_cl$EVTYPE))
There are a lot of event types that don’t tell us anything relevant to the analysis. We shall remove observations with unsuitable information.
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "Summary"))
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "SUMMARY"))
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "NONE"))
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "OTHER"))
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "VOG"))
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "WET YEAR"))
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "WET WEATHER"))
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "WET MONTH"))
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "NO SEVERE WEATHER"))
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "NON TSTM WIND"))
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "NON-SEVERE WIND DAMAGE"))
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "NON-TSTM WIND"))
storm_cl <- filter(storm_cl, !startsWith(storm_cl$EVTYPE, "NORTHERN LIGHTS"))
We have also detected other event types that don’t show clear information about the event, or that are not related to clearly defined natural events. We shall eliminate this ones too.
storm_cl <- filter(storm_cl, EVTYPE != "?")
storm_cl <- filter(storm_cl, EVTYPE != "MARINE ACCIDENT")
storm_cl <- filter(storm_cl, EVTYPE != "MARINE MISHAP")
storm_cl <- filter(storm_cl, EVTYPE != "RECORD TEMPERATURE")
storm_cl <- filter(storm_cl, EVTYPE != "RECORD TEMPERATURES")
storm_cl <- filter(storm_cl, EVTYPE != "LACK OF SNOW")
storm_cl <- filter(storm_cl, EVTYPE != "URBAN AND SMALL")
storm_cl <- filter(storm_cl, EVTYPE != "URBAN SMALL")
storm_cl <- filter(storm_cl, EVTYPE != "URBAN/SMALL")
storm_cl <- filter(storm_cl, EVTYPE != "BELOW NORMAL PRECIPITATION")
storm_cl <- filter(storm_cl, EVTYPE != "MIXED PRECIPITATION")
storm_cl <- filter(storm_cl, EVTYPE != "NORMAL PRECIPITATION")
storm_cl <- filter(storm_cl, EVTYPE != "MONTHLY PRECIPITATION")
storm_cl <- filter(storm_cl, EVTYPE != "SOUTHEAST")
storm_cl <- filter(storm_cl, EVTYPE != "TEMPERATURE RECORD")
storm_cl <- filter(storm_cl, EVTYPE != "MONTHLY TEMPERATURE")
storm_cl <- filter(storm_cl, EVTYPE != "RED FLAG CRITERIA")
storm_cl <- filter(storm_cl, EVTYPE != "RECORD LOW RAINFALL")
storm_cl <- filter(storm_cl, EVTYPE != "EXCESSIVE")
storm_cl <- filter(storm_cl, EVTYPE != "APACHE COUNTY")
We shall now proceed with a careful typos’ correction. We shall do this by looking at the metadata and detect differences, initially, in a kind of “manual” way. This will also allow us to achieve a better understanding of the original data frame composition.
AVALANCHE events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "AVALANCE",
yes = "AVALANCHE", no = EVTYPE))
BLIZZARD events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "BLOWING SNOW",
yes = "BLIZZARD", no = EVTYPE))
COLD/WIND CHILL
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "COLD WIND CHILL TEMPERATURES",
yes = "COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "COLD",
yes = "COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "COLD TEMPERATURE",
yes = "COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "COLD TEMPERATURES",
yes = "COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "COLD WEATHER",
yes = "COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "BITTER WIND CHILL TEMPERATURES",
yes = "COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "COLD WAVE",
yes = "COLD/WIND CHILL", no = EVTYPE))
COASTAL FLOOD events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "COASTALFLOOD"),
yes = "COASTAL FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "COASTAL FLOOD"),
yes = "COASTAL FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "COASTAL FLOO"),
yes = "COASTAL FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "COASTAL/TIDAL FLOOD",
yes = "COASTAL FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "COASTAL FLOOD"),
yes = "COASTAL FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "EROSION/CSTL FLOOD",
yes = "COASTAL FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "BEACH FLOOD",
yes = "COASTAL FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "TIDAL FLOOD",
yes = "COASTAL FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HEAVY SURF COASTAL FLOODING",
yes = "COASTAL FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "TIDAL FLOODING",
yes = "COASTAL FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "CSTL FLOODING/EROSION",
yes = "COASTAL FLOOD", no = EVTYPE))
DERBIS FLOW events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "LANDSL"),
yes = "DERBIS FLOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "LANDSLIDE"),
yes = "DERBIS FLOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "MUD SLIDE",
yes = "DERBIS FLOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "MUD SLIDES",
yes = "DERBIS FLOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "MUD/ROCK SLIDE",
yes = "DERBIS FLOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "MUDSLIDE",
yes = "DERBIS FLOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "MUDSLIDES",
yes = "DERBIS FLOW", no = EVTYPE))
DUST DEVIL events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "WHIRLWIND",
yes = "DUST DEVIL", no = EVTYPE))
DUST STORM events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "DRY MICROBURST"),
yes = "DUST STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "DUST STORM"),
yes = "DUST STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "BLOWING DUST"),
yes = "DUST STORM", no = EVTYPE))
DROUGHT events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "DRY"),
yes = "DROUGHT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD DRYNESS",
yes = "DROUGHT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD DRY MONTH",
yes = "DROUGHT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "DRY WEATHER",
yes = "DROUGHT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "DRY CONDITIONS",
yes = "DROUGHT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "DRIEST MONTH",
yes = "DROUGHT", no = EVTYPE))
EXCESSIVE HEAT events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "EXCESSIVE HEAT"),
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNSEASONABLY HOT",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNSEASONABLY WARM",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNSEASONABLY WARM & WET",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNSEASONABLY WARM AND DRY",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNSEASONABLY WARM/WET",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNUSUAL WARMTH",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNUSUALLY WARM",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNUSUAL/RECORD WARMTH",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNSEASONABLY WARM YEAR",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "VERY WARM",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD HEAT",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD HEAT WAVE",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD HIGH",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD HIGH TEMPERATURE",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD HIGH TEMPERATURES",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD WARM",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD WARM TEMPS.",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD WARMTH",
yes = "EXCESSIVE HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HIGH TEMPERATURE RECORD",
yes = "EXCESSIVE HEAT", no = EVTYPE))
EXTREME COLD/WIND CHILL events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "RECORD COLD"),
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNSEASONABLE COLD",
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNSEASONABLY COLD",
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNSEASONABLY COOL",
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNSEASONABLY COOL & WET",
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNSEASONAL LOW TEMP",
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UNUSUALLY COLD",
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SEVERE COLD",
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD COOL",
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD LOW",
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "RECORD COLD"),
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "LOW TEMPERATURE"),
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "BLIZZARD AND EXTREME WIND CHIL",
yes = "EXTREME COLD/WIND CHILL", no = EVTYPE))
FLASH FLOOD events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "FLASH FLOO"),
yes = "FLASH FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "FLOOD/FLASH"),
yes = "FLASH FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "FLASH FLOOD"),
yes = "FLASH FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "FLASH"),
yes = "FLASH FLOOD", no = EVTYPE))
FROST/FREEZE events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HARD FREEZE",
yes = "FROST/FREEZE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "FREEZE",
yes = "FROST/FREEZE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "FREEZING DRIZZLE",
yes = "FROST/FREEZE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "FREEZING DRIZZLE AND FREEZING",
yes = "FROST/FREEZE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "FREEZING FOG",
yes = "FROST/FREEZE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "FREEZING RAIN",
yes = "FROST/FREEZE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "FREEZING RAIN AND SNOW",
yes = "FROST/FREEZE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "FREEZING SPRAY",
yes = "FROST/FREEZE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "FROST",
yes = "FROST/FREEZE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "FROST\\FREEZE",
yes = "FROST/FREEZE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "DAMAGING FREEZE",
yes = "FROST/FREEZE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "COLD AND FROST",
yes = "FROST/FREEZE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "AGRICULTURAL FREEZE",
yes = "FROST/FREEZE", no = EVTYPE))
FLOOD events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "FLOOD"),
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HEAVY RAIN AND FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HEAVY RAIN/MUDSLIDES/FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HEAVY RAIN/URBAN FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "LANDSLIDE/URBAN FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "LOCAL FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "MAJOR FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "MINOR FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RIVER AND STREAM FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RIVER FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RURAL FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SMALL STREAM AND URBAN FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SMALL STREAM URBAN FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SMALL STREAM/URBAN FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "STREET FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "URBAN AND SMALL STREAM FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "URBAN FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "URBAN SMALL STREAM FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "URBAN SMALL STREAM FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "URBAN/SMALL STREAM FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "UURBAN/SMALL STREAM FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "URBAN/SMALL STREAM FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SMALL STREAM FLOOD",
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "FLOODING"),
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "FLOODS"),
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "FLD"),
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "FLDG"),
yes = "FLOOD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "FLOODIN"),
yes = "FLOOD", no = EVTYPE))
FUNNEL CLOUD events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "FUNNEL"),
yes = "FUNNEL CLOUD", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "WALL CLOUD/FUNNEL CLOUD",
yes = "FUNNEL CLOUD", no = EVTYPE))
HAIL events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "HAIL"),
yes = "HAIL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "DEEP HAIL",
yes = "HAIL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "LATE SEASON HAIL",
yes = "HAIL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SMALL HAIL",
yes = "HAIL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORM HAIL",
yes = "HAIL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "NON SEVERE HAIL",
yes = "HAIL", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "GUSTY WIND/HAIL",
yes = "HAIL", no = EVTYPE))
HEAT events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "HEAT"),
yes = "HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "HOT"),
yes = "HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "PROLONG WARMTH",
yes = "HEAT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "ABNORMAL WARMTH",
yes = "HEAT", no = EVTYPE))
HEAVY RAIN events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "TSTM HEAVY RAIN",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HEAVY PRECIPITATION",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD PRECIPITATION",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "EXCESSIVE PRECIPITATION",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RAIN (HEAVY)",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RAINSTORM",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "SMALL STREAM"),
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "TORRENTIAL RAINFALL",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "TORRENTIAL RAIN",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "HEAVY RAIN"),
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SMALL STREAM AND",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HEAVY PRECIPATATION",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "PROLONGED RAIN",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RAIN DAMAGE",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD/EXCESSIVE RAINFALL",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "EXCESSIVE RAIN",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HVY RAIN",
yes = "HEAVY RAIN", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD RAINFALL",
yes = "HEAVY RAIN", no = EVTYPE))
HEAVY SNOW events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "HEAVY SNOW"),
yes = "HEAVY SNOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/HEAVY SNOW",
yes = "HEAVY SNOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOWFALL RECORD",
yes = "HEAVY SNOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOWSTORM",
yes = "HEAVY SNOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW AND HEAVY SNOW",
yes = "HEAVY SNOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW SHOWERS",
yes = "HEAVY SNOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HEAVY WET SNOW",
yes = "HEAVY SNOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HEAVY LAKE SNOW",
yes = "HEAVY SNOW", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "BLIZZARD/HEAVY SNOW",
yes = "HEAVY SNOW", no = EVTYPE))
HURRICANE (TYPHOON) events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "TYPHOON",
yes = "HURRICANE (TYPHOON)", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "HURRICANE"),
yes = "HURRICANE (TYPHOON)", no = EVTYPE))
HIGH WIND events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "WIND"),
yes = "HIGH WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "WND"),
yes = "HIGH WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "HIGH WIND"),
yes = "HIGH WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HIGH WINDS",
yes = "HIGH WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "GUSTY"),
yes = "HIGH WIND", no = EVTYPE))
HIGH SURF events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "HIGH SURF"),
yes = "HIGH SURF", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "ASTRONOMICAL HIGH TIDE"),
yes = "HIGH SURF", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "BEACH EROSION"),
yes = "HIGH SURF", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HIGH TIDES",
yes = "HIGH SURF", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HIGH TIDES",
yes = "HIGH SURF", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HIGH WAVES",
yes = "HIGH SURF", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HIGH WATER",
yes = "HIGH SURF", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HIGH SEAS",
yes = "HIGH SURF", no = EVTYPE))
ICE STORM events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "BLACK ICE"),
yes = "ICE STORM", no = EVTYPE))
LAKESHORE FLOOD events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "LAKE FLOOD",
yes = "LAKESHORE FLOOD", no = EVTYPE))
LAKE-EFFECT SNOW events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "LAKE EFFECT SNOW",
yes = "LAKE-EFFECT SNOW", no = EVTYPE))
LIGHTNING events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "LIGHTNING.",
yes = "LIGHTNING", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "LIGHTING",
yes = "LIGHTNING", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "LIGNTNING",
yes = "LIGHTNING", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "LIGHTNING"),
yes = "LIGHTNING", no = EVTYPE))
MARINE THUNDERSTORM WIND WIND events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "MARINE TSTM WIND",
yes = "MARINE THUNDERSTORM WIND", no = EVTYPE))
RIP CURRENT events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "RIP"),
yes = "RIP CURRENT", no = EVTYPE))
STRONG WIND events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "STRONG WIND"),
yes = "STRONG WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "STORM FORCE WINDS",
yes = "STRONG WIND", no = EVTYPE))
STORM SURGE/TIDE events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "STORM SURGE",
yes = "STORM SURGE/TIDE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HEAVY SURF/HIGH SURF",
yes = "STORM SURGE/TIDE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HEAVY SURF",
yes = "STORM SURGE/TIDE", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "HEAVY SEAS",
yes = "STORM SURGE/TIDE", no = EVTYPE))
SLEET events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "FREEZING RAIN SLEET"),
yes = "SLEET", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "FREEZING RAIN AND SLEET",
yes = "SLEET", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SLEET & FREEZING RAIN",
yes = "SLEET", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SLEET STORM",
yes = "SLEET", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SLEET/FREEZING RAIN",
yes = "SLEET", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SLEET/ICE STORM",
yes = "SLEET", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "FREEZING RAIN/SLEET",
yes = "SLEET", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "LIGHT SNOW AND SLEET",
yes = "SLEET", no = EVTYPE))
TROPICAL STORM events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "TROPICAL STORM"),
yes = "TROPICAL STORM", no = EVTYPE))
THUNDERSTORM WIND events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORM WINDS.",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORM WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORM WIND.",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNERSTORM WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "TSTM WIND"),
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "THUNDERSTORM WIND"),
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "TSTM WND"),
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUDERSTORM WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDEERSTORM WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORM W INDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORM WINS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORMW",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTROM WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORMS WIND",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORMS WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORMW WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORMWINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERTORM WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERTSORM WIND",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERTORM WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDESTORM WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORM",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORM DAMAGE",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORM DAMAGE TO",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORMS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTORMW 50",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "THUNDERSTROM WIND",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "TSTM",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "TSTMW",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SEVERE THUNDERSTORM",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SEVERE THUNDERSTORM WIND",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SEVERE THUNDERSTORM",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SEVERE THUNDERSTORM WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SEVERE THUNDERSTORMS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "WET MIC"),
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "DRY MIRCOBURST WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "DOWNBURST",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "DOWNBURST WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "GUSTNADO"),
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "TUNDERSTORM WIND"),
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "THUNDERESTORM WINDS"),
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "THUNDERSNOW SHOWER"),
yes = "THUNDERSTORM WIND", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "MICROBURST WINDS",
yes = "THUNDERSTORM WIND", no = EVTYPE))
TORNADO events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "TORNADO"),
yes = "TORNADO", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "TORNDAO",
yes = "TORNADO", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(endsWith(storm_cl$EVTYPE, "TORNADO"),
yes = "TORNADO", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "LANDSPOUT",
yes = "TORNADO", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "COLD AIR FUNNEL"),
yes = "TORNADO", no = EVTYPE))
VOLCANIC ASH events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "VOLCANIC"),
yes = "VOLCANIC ASH", no = EVTYPE))
WATERSPOUT events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "WATERSPOUT"),
yes = "WATERSPOUT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "WAYTERSPOUT",
yes = "WATERSPOUT", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "WATER SPOUT",
yes = "WATERSPOUT", no = EVTYPE))
WINTER STORM events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "WINTER STORM"),
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "BLOWING SNOW & EXTREME WIND CH",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "BLOWING SNOW- EXTREME WIND CHI",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "BLOWING SNOW/EXTREME WIND CHIL",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "ICE AND SNOW",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "ICE STORM AND SNOW",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "ICE/SNOW",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW AND ICE",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW AND ICE STORM",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW AND SLEET",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/ ICE",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/RAIN/SLEET",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/SLEET",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/SLEET/FREEZING RAIN",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/SLEET/RAIN",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/BLOWING SNOW",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW SLEET",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/ICE",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/ICE STORM",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SLEET/RAIN/SNOW",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SLEET/SNOW",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD SNOW",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD SNOW/COLD",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD SNOWFALL",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD WINTER SNOW",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "EARLY SNOW",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "EXCESSIVE COLD",
yes = "WINTER STORM", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "EARLY SNOWFALL",
yes = "WINTER STORM", no = EVTYPE))
WINTER WEATHER events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "WINTER MIX",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "WINTERY MIX",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "WINTRY MIX",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "WINTER WEATHER"),
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW\\COLD",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/COLD",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/ BITTER COLD",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW SQUALLS",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW SQUALL",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "WET SNOW",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/RAIN",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/HIGH WINDS",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW ACCUMULATION",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW ADVISORY",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW AND COLD",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW AND WIND",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW- HIGH WIND- WIND CHILL",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW/FREEZING RAIN",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "PROLONG COLD",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "PROLONG COLD/SNOW",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RAIN/SNOW",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "RECORD COLD",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "SNOW FREEZING RAIN",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "MODERATE SNOW",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "MODERATE SNOWFALL",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "MONTHLY SNOWFALL",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "GLAZE/ICE STORM",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "GLAZE ICE",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "GLAZE",
yes = "WINTER WEATHER", no = EVTYPE))
storm_cl <- transform(storm_cl, EVTYPE = ifelse(EVTYPE == "ACCUMULATED SNOWFALL",
yes = "WINTER WEATHER", no = EVTYPE))
WILDFIRE events
storm_cl <- transform(storm_cl, EVTYPE = ifelse(startsWith(storm_cl$EVTYPE, "WILD"),
yes = "WILDFIRE", no = EVTYPE))
cl_types <- str_sort(unique(storm_cl$EVTYPE))
print(cl_types)
## [1] "ABNORMALLY WET" "ASTRONOMICAL LOW TIDE"
## [3] "AVALANCHE" "BEACH EROSIN"
## [5] "BITTER WIND CHILL" "BLIZZARD"
## [7] "BLIZZARD AND HEAVY SNOW" "BLIZZARD SUMMARY"
## [9] "BLIZZARD WEATHER" "BLIZZARD/FREEZING RAIN"
## [11] "BLIZZARD/HIGH WIND" "BLIZZARD/WINTER STORM"
## [13] "BLOW-OUT TIDE" "BLOW-OUT TIDES"
## [15] "BRUSH FIRE" "BRUSH FIRES"
## [17] "COASTAL EROSION" "COASTAL FLOOD"
## [19] "COASTAL STORM" "COASTAL SURGE"
## [21] "COASTALSTORM" "COLD AND SNOW"
## [23] "COLD AND WET CONDITIONS" "COLD/WIND CHILL"
## [25] "COLD/WINDS" "COOL AND WET"
## [27] "COOL SPELL" "DAM BREAK"
## [29] "DAM FAILURE" "DENSE FOG"
## [31] "DENSE SMOKE" "DERBIS FLOW"
## [33] "DRIFTING SNOW" "DROUGHT"
## [35] "DROWNING" "DRY HOT WEATHER"
## [37] "DRY PATTERN" "DRY SPELL"
## [39] "DRYNESS" "DUST DEVEL"
## [41] "DUST DEVIL" "DUST DEVIL WATERSPOUT"
## [43] "DUST STORM" "DUSTSTORM"
## [45] "EARLY FREEZE" "EARLY FROST"
## [47] "EARLY RAIN" "EXCESSIVE HEAT"
## [49] "EXCESSIVE HEAT/DROUGHT" "EXCESSIVE RAINFALL"
## [51] "EXCESSIVE SNOW" "EXCESSIVE WETNESS"
## [53] "EXTENDED COLD" "EXTREME COLD"
## [55] "EXTREME COLD/WIND CHILL" "EXTREME HEAT"
## [57] "EXTREME WIND CHILL" "EXTREME WIND CHILL/BLOWING SNO"
## [59] "EXTREME WIND CHILLS" "EXTREME WINDCHILL"
## [61] "EXTREME WINDCHILL TEMPERATURES" "EXTREME/RECORD COLD"
## [63] "EXTREMELY WET" "FALLING SNOW/ICE"
## [65] "FIRST FROST" "FIRST SNOW"
## [67] "FLASH FLOOD" "FLOOD"
## [69] "FOG" "FOG AND COLD TEMPERATURES"
## [71] "FOREST FIRES" "FREEZING RAIN/SNOW"
## [73] "FROST/FREEZE" "FUNNEL CLOUD"
## [75] "GRADIENT WIND" "GRADIENT WINDS"
## [77] "GRASS FIRES" "GROUND BLIZZARD"
## [79] "HAIL" "HAZARDOUS SURF"
## [81] "HEAT" "HEAVY MIX"
## [83] "HEAVY RAIN" "HEAVY SHOWER"
## [85] "HEAVY SHOWERS" "HEAVY SNOW"
## [87] "HEAVY SURF AND WIND" "HEAVY SWELLS"
## [89] "HIGH" "HIGH SWELLS"
## [91] "HIGH SURF" "HIGH SWELLS"
## [93] "HIGH WIND" "HURRICANE (TYPHOON)"
## [95] "HYPERTHERMIA/EXPOSURE" "HYPOTHERMIA"
## [97] "HYPOTHERMIA/EXPOSURE" "ICE"
## [99] "ICE FLOES" "ICE FOG"
## [101] "ICE JAM" "ICE JAM FLOOD (MINOR"
## [103] "ICE ON ROAD" "ICE PELLETS"
## [105] "ICE ROADS" "ICE STORM"
## [107] "ICE/STRONG WINDS" "ICESTORM/BLIZZARD"
## [109] "ICY ROADS" "LAKE-EFFECT SNOW"
## [111] "LAKESHORE FLOOD" "LARGE WALL CLOUD"
## [113] "LATE FREEZE" "LATE SEASON SNOW"
## [115] "LATE SEASON SNOWFALL" "LATE SNOW"
## [117] "LATE-SEASON SNOWFALL" "LIGHT FREEZING RAIN"
## [119] "LIGHT SNOW" "LIGHT SNOW/FLURRIES"
## [121] "LIGHT SNOW/FREEZING PRECIP" "LIGHT SNOWFALL"
## [123] "LIGHTNING" "LOCALLY HEAVY RAIN"
## [125] "LOW WIND CHILL" "MARINE HAIL"
## [127] "MARINE HIGH WIND" "MARINE STRONG WIND"
## [129] "MARINE THUNDERSTORM WIND" "METRO STORM, MAY 26"
## [131] "MICROBURST" "MILD AND DRY PATTERN"
## [133] "MILD PATTERN" "MILD/DRY PATTERN"
## [135] "MIXED PRECIP" "MONTHLY RAINFALL"
## [137] "MOUNTAIN SNOWS" "NEAR RECORD SNOW"
## [139] "PATCHY DENSE FOG" "PATCHY ICE"
## [141] "RAIN" "RAIN AND WIND"
## [143] "RAIN/WIND" "RAPIDLY RISING WATER"
## [145] "RECORD MAY SNOW" "RED FLAG FIRE WX"
## [147] "REMNANTS OF FLOYD" "RIP CURRENT"
## [149] "ROCK SLIDE" "ROGUE WAVE"
## [151] "ROTATING WALL CLOUD" "ROUGH SEAS"
## [153] "ROUGH SURF" "SAHARAN DUST"
## [155] "SEASONAL SNOWFALL" "SEICHE"
## [157] "SEVERE TURBULENCE" "SLEET"
## [159] "SMOKE" "SNOW DROUGHT"
## [161] "STORM SURGE/TIDE" "STRONG WIND"
## [163] "THUNDERSNOW" "THUNDERSTORM WIND"
## [165] "TORNADO" "TROPICAL DEPRESSION"
## [167] "TROPICAL STORM" "TSUNAMI"
## [169] "UNSEASONABLY WET" "UNSEASONAL RAIN"
## [171] "UNUSUALLY LATE SNOW" "VOLCANIC ASH"
## [173] "WAKE LOW WIND" "WALL CLOUD"
## [175] "WARM DRY CONDITIONS" "WARM WEATHER"
## [177] "WATERSPOUT" "WILDFIRE"
## [179] "WINTER STORM" "WINTER WEATHER"
We have managed to downsize the total number of different values to less than 25% of the original data frame. We will now try to asses if we should get rid of those values that only have very few observations in order to move forward with the analysis
singleobs <- count(storm_cl, EVTYPE)
i=NULL
for (i in singleobs) {
ones = ifelse(singleobs$n==1, yes = 1, no = 0)
}
onevalues <- (sum(ones))
others <- (sum(i))
for (i in singleobs) {
fives = ifelse(singleobs$n<=5, yes = 1, no = 0)
}
fivevalues <- (sum(fives))
others <- (sum(i))
print(paste("There are", onevalues, "event types with only 1 observation", "eq. to",
round(100*onevalues/others, digits = 3), "% of the total obs."))
## [1] "There are 80 event types with only 1 observation eq. to 0.009 % of the total obs."
print(paste("There are", fivevalues, "event types with 5 or less observations"))
## [1] "There are 109 event types with 5 or less observations"
vec_types <- filter(singleobs, singleobs$n <= 5)
print(paste("total number of observations for this", fivevalues, "event types, is equal to", sum(vec_types$n)))
## [1] "total number of observations for this 109 event types, is equal to 167"
print(paste("this is equivalent to", round(100*(sum(vec_types$n)/others), digits = 3),"% of total observations"))
## [1] "this is equivalent to 0.019 % of total observations"
It seems reasonable to eliminate observations for event types with less than 5 observations to further cleaning of our data without having any mayor negative implication on the analysis.
typesgone <- vec_types[,1]
typ_pos<- match(typesgone, storm_cl$EVTYPE)
storm_clean <- storm_cl[-typ_pos,]
type_clean <- unique(storm_clean$EVTYPE)
totfatal <- sum(storm_clean$FATALITIES)
totinj <- sum(storm_clean$INJURIES)
print(paste("The total of fatalities accross all years is:", totfatal))
## [1] "The total of fatalities accross all years is: 15101"
print(paste("The total of injuries accross all years is:", totinj))
## [1] "The total of injuries accross all years is: 140474"
We now have a much smaller number of unique even types values. We will proceed de analysis by grouping the data by event type.
storm_by_ev <- group_by(storm_clean, EVTYPE)
ev_humanc <- summarise(storm_by_ev, t_fatal = sum(FATALITIES, na.rm = TRUE), t_inj= sum(INJURIES, na.rm = TRUE))
ev_humanc <- filter(ev_humanc, t_fatal > 0 | t_inj > 0)
ev_types48 <- c("Astronomical Low Tide","Avalanche", "Blizzard", "Coastal Flood",
"Cold/Wind Chill", "Debris Flow", "Dense Fog", "Dense Smoke", "Drought", "Dust Devil",
"Dust Storm", "Excessive Heat", "Extreme Cold/Wind Chill", "Flash Flood", "Flood",
"Frost/Freeze", "Funnel Cloud", "Freezing Fog", "Hail", "Heat", "Heavy Rain","Heavy Snow",
"High Surf", "High Wind", "Hurricane (Typhoon)", "Ice Storm", "Lake-Effect Snow", "Lakeshore Flood",
"Lightning", "Marine Hail", "Marine High Wind", "Marine Strong Wind", "Marine Thunderstorm Wind",
"Rip Current", "Seiche", "Sleet", "Storm Surge/Tide", "Strong Wind", "Thunderstorm Wind","Tornado",
"Tropical Depression", "Tropical Storm", "Tsunami", "Volcanic Ash", "Waterspout", "Wildfire",
"Winter Storm", "Winter Weather")
ev_types48 <- str_to_upper(ev_types48)
ev_types48 <- data.frame(ev_types48)
ev_types48 <- rename(ev_types48, EVTYPE = ev_types48)
ev_h_dmg <- inner_join(ev_humanc, ev_types48, by = "EVTYPE")
Economical consequences of the storms are registered under to main variables: (1) Property damage and (2) Crop damage.
According to the storm data metadata: “Typically, damage refers to damage inflicted to private property (structures, objects, vegetation) as well as public infrastructure and facilities.”
The total economical consequences can be computed in a very straightforward fashion. However, it is necessary to make some minor cleaning and transformation of data.
We can take a look at how differente values for crop and property damage exponentes are registered in the database:
sort(unique(storm_by_ev$PROPDMGEXP))
## [1] "" "-" "?" "+" "0" "1" "2" "3" "4" "5" "6" "7" "8" "B" "h" "H" "K" "m" "M"
sort(unique(storm_by_ev$CROPDMGEXP))
## [1] "" "?" "0" "2" "B" "k" "K" "m" "M"
We can see upper and lower case use is combined, we would want this to be constant through the dataframe, so we can correct that:
storm_dmg <- mutate(storm_by_ev, PROPDMGEXP = str_to_upper(PROPDMGEXP))
storm_dmg <- mutate(storm_dmg, CROPDMGEXP = str_to_upper(CROPDMGEXP))
sort(unique(storm_dmg$CROPDMGEXP))
## [1] "" "?" "0" "2" "B" "K" "M"
sort(unique(storm_dmg$PROPDMGEXP))
## [1] "" "-" "?" "+" "0" "1" "2" "3" "4" "5" "6" "7" "8" "B" "H" "K" "M"
After this simple cleaning, we realize there are other characters that are of no use to our analysis. We will substitute the damage value to 0, for observations with characters: "“,”?“,”-“,”+". This will allow us to ignore observations with this three symbols
storm_dmg <- transform(storm_dmg,
PROPDMG = as.numeric(ifelse(PROPDMGEXP == "",
yes = 0,
no =PROPDMG)))
storm_dmg <- transform(storm_dmg,
PROPDMG = as.numeric(ifelse(PROPDMGEXP == "-",
yes = 0,
no =PROPDMG)))
storm_dmg <- transform(storm_dmg,
PROPDMG = as.numeric(ifelse(PROPDMGEXP == "+",
yes = 0,
no =PROPDMG)))
storm_dmg <- transform(storm_dmg,
PROPDMG = as.numeric(ifelse(PROPDMGEXP == "?",
yes = 0,
no =PROPDMG)))
storm_dmg <- transform(storm_dmg,
CROPDMG = as.numeric(ifelse(PROPDMGEXP == "",
yes = 0,
no =CROPDMG)))
storm_dmg <- transform(storm_dmg,
CROPDMG = as.numeric(ifelse(PROPDMGEXP == "?",
yes = 0,
no =CROPDMG)))
sort(unique(storm_dmg$CROPDMGEXP))
## [1] "" "?" "0" "2" "B" "K" "M"
sort(unique(storm_dmg$PROPDMGEXP))
## [1] "" "-" "?" "+" "0" "1" "2" "3" "4" "5" "6" "7" "8" "B" "H" "K" "M"
First let’s take a look at the classes from variables crop and property damage:
class(storm_dmg$CROPDMG)
## [1] "numeric"
class(storm_dmg$PROPDMG)
## [1] "numeric"
Since they are both numeric, we can proceed directly with numeric transformations based on the exponent variables.
storm_dmg <- transform(storm_dmg, XCROPEXP = NA)
storm_dmg <- transform(storm_dmg, XPROPEXP = NA)
#Crop exponents
storm_dmg <- transform(storm_dmg,
XCROPEXP = as.numeric(ifelse(CROPDMGEXP == "", yes = 0,
no = XCROPEXP)))
storm_dmg <- transform(storm_dmg,
XCROPEXP = as.numeric(ifelse(CROPDMGEXP == "?", yes = 0,
no = XCROPEXP)))
storm_dmg <- transform(storm_dmg,
XCROPEXP = as.numeric(ifelse(CROPDMGEXP == "0", yes = 1,
no = XCROPEXP)))
storm_dmg <- transform(storm_dmg,
XCROPEXP = as.numeric(ifelse(CROPDMGEXP == "2", yes = 100,
no = XCROPEXP)))
storm_dmg <- transform(storm_dmg,
XCROPEXP = as.numeric(ifelse(CROPDMGEXP == "B", yes = 1000000000,
no = XCROPEXP)))
storm_dmg <- transform(storm_dmg,
XCROPEXP = as.numeric(ifelse(CROPDMGEXP == "M", yes = 1000000,
no = XCROPEXP)))
storm_dmg <- transform(storm_dmg,
XCROPEXP = as.numeric(ifelse(CROPDMGEXP == "K", yes = 1000,
no = XCROPEXP)))
#Property exponents
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "", yes = 0,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "-", yes = 0,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "?", yes = 0,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "+", yes = 0,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "0", yes = 1,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "1", yes = 10,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "2", yes = 100,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "3", yes = 1000,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "4", yes = 10000,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "5", yes = 100000,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "6", yes = 1000000,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "7", yes = 10000000,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "8", yes = 100000000,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "B", yes = 1000000000,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "M", yes = 1000000,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "K", yes = 1000,
no = XPROPEXP)))
storm_dmg <- transform(storm_dmg,
XPROPEXP = as.numeric(ifelse(PROPDMGEXP == "H", yes = 100,
no = XPROPEXP)))
unique(storm_dmg$XPROPEXP)
## [1] 1e+03 1e+06 0e+00 1e+09 1e+00 1e+05 1e+04 1e+02 1e+07 1e+01 1e+08
unique(storm_dmg$XCROPEXP)
## [1] 0e+00 1e+06 1e+03 1e+09 1e+00 1e+02
We now have the necessary values to calculate the sum of crop damage and property damage. We are going to multiply the values by the numeric exponent, and add them together and express them in millions.
storm_dmg <- mutate(storm_dmg, CROPDMG_M = CROPDMG*XCROPEXP/1000000)
storm_dmg <- mutate(storm_dmg, PROPDMG_M = PROPDMG*XPROPEXP/1000000)
storm_dmg <- mutate(storm_dmg, ECONOMICAL_DMG_M = CROPDMG_M+PROPDMG_M)
Group and summarize economical conseguences by event type
storm_dmg <- group_by(storm_dmg, EVTYPE)
ev_economical <- summarise(storm_dmg, TOT_DAMAGE = sum(ECONOMICAL_DMG_M, na.rm = TRUE))
ev_economical <- filter(ev_economical, TOT_DAMAGE > 0 )
ev_ec_dmg <- inner_join(ev_economical, ev_types48, by = "EVTYPE")
coeff <- 20
ggplot(ev_h_dmg, aes(x=EVTYPE)) +
geom_point(aes(y=t_fatal), color="red") +
geom_point(aes(y=t_inj / coeff), color="darkblue") +
scale_y_continuous(name = "Fatalities",
sec.axis = sec_axis(trans = ~.*coeff, name = "Injuries"))+
theme(axis.text.x=element_text(angle=90,hjust=1, size = 7),
axis.title.y = element_text(color = "red"),
axis.title.y.right = element_text(color = "darkblue"))+
labs(x = "Event Type")+
ggtitle("Human health consecuences by event type")+
geom_hline(yintercept=1000, linetype="dashed")
In the chart above, we have combined to kinds of human health consequences for event types. In dark blue, scaled by the right y axis, we can se number of injuries. Fatalities are plotted in red, scaled by the left y axis.
We can visually identify nine types of events that have more fatalities than the others. If we analyze this by total injuries by event, we can clearly identify one type of event that stands among the others. This type of event also accounts for the largest number of fatalities.
If we place a horizontal line at value 1,000 in the left y axis, we can visually identify four different event types.
top_hhealth <- subset(ev_h_dmg$EVTYPE, ev_h_dmg$t_fatal >= 1000)
dftop_hhalth <- filter(ev_h_dmg, t_fatal >= 1000)
fatal_4_events <- sum(dftop_hhalth$t_fatal)
inj_4_events <- sum(dftop_hhalth$t_inj)
Most harmful event types to human health are:
print(top_hhealth)
## [1] "EXCESSIVE HEAT" "FLASH FLOOD" "HEAT" "TORNADO"
This four events account for:
paste((fatal_4_events), "fatalities over the 50 year period", "equivalent to",
round(100*(fatal_4_events/totfatal), digits = 2), "% of the total")
## [1] "9749 fatalities over the 50 year period equivalent to 64.56 % of the total"
paste((inj_4_events), "injuries over the 50 year period", "equivalent to",
round(100*(inj_4_events/totinj), digits = 2),"% of the total")
## [1] "102295 injuries over the 50 year period equivalent to 72.82 % of the total"
Clearly, tornadoes are the most harmful events:
torn_fat <- subset(ev_h_dmg$t_fatal, ev_h_dmg$EVTYPE=="TORNADO")
torn_inj <- subset(ev_h_dmg$t_inj, ev_h_dmg$EVTYPE=="TORNADO")
paste(torn_fat, "fatalities are due to tornados alone", round(100*(torn_fat/totfatal), digits = 2),"% of the total")
## [1] "5661 fatalities are due to tornados alone 37.49 % of the total"
paste(torn_inj, "injuries are due to tornados alone", round(100*(torn_inj/totinj), digits = 2),"% of the total")
## [1] "91407 injuries are due to tornados alone 65.07 % of the total"
ggplot(ev_ec_dmg, aes(x=EVTYPE))+
geom_point(aes(y=TOT_DAMAGE), color="darkgreen")+
theme(axis.text.x=element_text(angle=90,hjust=1, size = 7))+
labs(x = "Event Type", y = "Total damage in millions USD$")+
ggtitle("Economic consecuences by event type")+
geom_hline(yintercept=40000, linetype="dashed")
As we can se from the graph above, we can identify four main even types that have the greater economic consequences. Above the mark of 40,000 million, or what is the same, 50 billion dolars, we can find (incrementally): Storm surge/Tide, Tornadoes, Hurricanes and Floods.
top_econom_types <- subset(ev_ec_dmg$EVTYPE, ev_ec_dmg$TOT_DAMAGE >= 40000)
top_econom_df <- filter(ev_ec_dmg, TOT_DAMAGE >= 40000)
top_economical_co <- sum(top_econom_df$TOT_DAMAGE)
total_economical_co <- sum(ev_ec_dmg$TOT_DAMAGE)
print("Top four highest economical consequences events are:")
## [1] "Top four highest economical consequences events are:"
top_econom_types
## [1] "FLOOD" "HURRICANE (TYPHOON)" "STORM SURGE/TIDE"
## [4] "TORNADO"
paste("These account for a total of", top_economical_co, "million dollars")
## [1] "These account for a total of 358144.3433935 million dollars"
paste("Equivalent to", round(100*(top_economical_co/total_economical_co), digits = 2),
"% of all events economic consequences")
## [1] "Equivalent to 78.12 % of all events economic consequences"
It is interesting to see how floods is the event with the highest economical consequences, but not the highest in human health consequences. Tornadoes, on the other hand, appear in both measures as events of important consequences, for human health and for the economy. ```