if(!("dplyr" %in% installed.packages())) install.packages("dplyr")
library(dplyr)
if(!("dplyr" %in% installed.packages())) install.packages("dplyr")
library(xtable)
In this report I aim to describe the consequences of the different types of Storm Events in the US from 1996 to 2010 in terms of economic damages (to crops and properties) and population health (number of injuries and victims). In particular, I want to determine which are the most harmful events, specifically the ones that account for at least 90% of damages based on annual mean. Data will be explored both at national level and for each state.
First, I downloaded and parsed the NOAA Storm Database containing data from Jan 1950 to Nov 2011. The dataset consists of 902297 records, each with 37 variables.
if(!file.exists("NOAA.csv.bz2")) {
download.file("https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2", "NOAA.csv.bz2")
}
data<-read.csv(bzfile("NOAA.csv.bz2"))
dim(data)
## [1] 902297 37
Then, data were subsetted:
- According to NOAA, the collection of all the 48 event types started in January 1996, therefore it is not useful (and could also be misleading) for the purpose of this analysis to use data previous to 1996.
- As data referring to Dec 2011 are not provided, the year is not complete and will be discarded.
- Variables I plan to use are the ones related with type of event, date, state, fatalities, injuries, damages to property and damages to crop:
data<- mutate(data, BGN_DATE=as.Date(BGN_DATE, "%m/%d/%Y %H:%M:%S")) %>% filter((BGN_DATE>as.Date("1996/01/01", "%Y/%m/%d")) & (BGN_DATE<as.Date("2011/01/01", "%Y/%m/%d"))) %>% select(BGN_DATE, STATE, EVTYPE, FATALITIES, INJURIES, PROPDMG, PROPDMGEXP, CROPDMG, CROPDMGEXP)
dim(data)
## [1] 591333 9
Now, data have to be cleaned. All the 515 different values in the EVTYPE column must eventually match one of the 48 ones codified in NOAA documentation, that I saved in the variable “types”.
First, I removed entries that appear to be summaries rather than actual events
length(unique(data$EVTYPE))
## [1] 515
types<-toupper(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"))
original_states<- unique(data$STATE) # needed later
data$EVTYPE<-sub("^( +)", "", data$EVTYPE)
data<-mutate(data, EVTYPE=toupper(EVTYPE)) %>% filter(!grepl("SUMMARY", EVTYPE)) %>% filter(!grepl("MONTHLY", EVTYPE))
dim(data)
## [1] 591203 9
Then, I changed event names fixing typos and converting all synonyms to the official event name. Regular expressions where used whenever possible, but often the event names had to be picked by hand.
data$EVTYPE[data$EVTYPE %in% c("ABNORMAL WARMTH", "HOT WEATHER", "RECORD TEMPERATURE", "RECORD TEMPERATURES","RECORD WARM TEMPS.", "RECORD HEAT", "RECORD HIGH", "RECORD WARM", "RECORD WARMTH", "TEMPERATURE RECORD", "UNSEASONABLY HOT", "UNSEASONABLY WARM", "UNSEASONABLY WARM YEAR", "UNUSUAL WARMTH", "UNUSUAL/RECORD WARMT","UNUSUALLY WARM","EXCESSIVE HEAT/DROUGHT")]<-"EXCESSIVE HEAT"
data$EVTYPE[data$EVTYPE %in% c("HEAT WAVE", "HEATBURST")]<-"HEAT"
data$EVTYPE[data$EVTYPE %in% c("ABNORMALLY WET","EXTREMELY WET", "UNSEASONABLY WET", "WET MONTH", "WET YEAR", "EXCESSIVE RAIN", "EXCESSIVE RAINFALL", "HEAVY RAIN EFFECTS", "HEAVY RAINFALL", "LOCALLY HEAVY RAIN", "MONTHLY RAINFALL", "PROLONGED RAIN", "RAIN", "RAIN DAMAGE", "RECORD RAINFALL", "TORRENTIAL RAINFALL", "UNSEASONAL RAIN", "RAIN (HEAVY)")]<- "HEAVY RAIN"
data$EVTYPE[data$EVTYPE %in% c("COLD", "COLD TEMPERATURE", "COLD TEMPERATURES", "COLD WEATHER", "COLD WIND CHILL TEMPERATURES", "EXTENDED COLD", "PROLONG COLD", "BITTER WIND CHILL", "BITTER WIND CHILL TEMPERATURES", "WIND CHILL")]<-"COLD/WIND CHILL"
data$EVTYPE[data$EVTYPE %in% c("EXCESSIVE COLD", "EXTREME COLD", "RECORD COLD", "RECORD COLD", "UNSEASONABLE COLD", "UNSEASONABLY COLD", "UNUSUALLY COLD", "EXTREME WIND CHILL", "EXTREME WINDCHILL", "EXTREME WINDCHILL TEMPERATURES", "UNSEASONABLY COOL")]<-"EXTREME COLD/WIND CHILL"
data$EVTYPE<-sub("(.*)TSTM(.*)", "THUNDERSTORM WIND", data$EVTYPE)
data$EVTYPE<-sub("(.*)THUNDERSTORM(.*)", "THUNDERSTORM WIND", data$EVTYPE)
data$EVTYPE<-sub("(.*)BLIZZARD(.*)", "BLIZZARD", data$EVTYPE)
data$EVTYPE<-sub("(.*)COASTAL(.*)", "COASTAL FLOOD", data$EVTYPE)
data$EVTYPE<-sub("(.*)CSTL(.*)", "COASTAL FLOOD", data$EVTYPE)
data$EVTYPE<-sub("(.*)FLASH(.*)FLOOD(.*)", "FLASH FLOOD", data$EVTYPE)
data$EVTYPE[data$EVTYPE %in% c("FLOOD/STRONG WIND", "ICE JAM FLOOD (MINOR", "MINOR FLOODING", "RIVER FLOOD", "RIVER FLOODING", "SNOWMELT FLOODING", "STREET FLOODING", "TIDAL FLOODING", "URBAN FLOOD", "URBAN FLOODING", "URBAN/STREET FLOODING", "URBAN/SML STREAM FLD", "URBAN/SMALL STRM FLDG", "URBAN/SML STREAM FLDG")]<-"FLOOD"
data$EVTYPE<-sub("(.*)FROST(.*)", "FROST/FREEZE", data$EVTYPE)
data$EVTYPE<-sub("(.*)FREEZE(.*)", "FROST/FREEZE", data$EVTYPE)
data$EVTYPE[data$EVTYPE %in% c("FOG", "PATCHY DENSE FOG")]<-"DENSE FOG"
data$EVTYPE[data$EVTYPE=="ICE FOG"]<-"FREEZING FOG"
data$EVTYPE[data$EVTYPE=="SMOKE"]<-"DENSE SMOKE"
data$EVTYPE[data$EVTYPE=="DUST DEVEL"]<-"DUST DEVIL"
data$EVTYPE[data$EVTYPE %in% c("BLOWING DUST", "SAHARAN DUST")]<-"DUST STORM"
data$EVTYPE[data$EVTYPE=="LANDSLIDE"]<-"AVALANCHE"
data$EVTYPE[data$EVTYPE %in% c("STORM SURGE", "ASTRONOMICAL HIGH TIDE", "ASTRONOMICAL HIGH TIDE", "BLOW-OUT TIDE", "HIGH SEAS")]<-"STORM SURGE/TIDE"
data$EVTYPE[data$EVTYPE=="RIP CURRENTS"]<-"RIP CURRENT"
data$EVTYPE<-sub("(.*)SURF(.*)", "HIGH SURF", data$EVTYPE)
data$EVTYPE[data$EVTYPE %in% c("ABNORMALLY DRY", "DRIEST MONTH", "DRY", "DRY CONDITIONS", "DRY WEATHER", "DRYNESS", "EXCESSIVELY DRY", "RECORD DRY MONTH", "RECORD DRYNESS", "UNSEASONABLY DRY", "VERY DRY")]<- "DROUGHT"
data$EVTYPE<-sub("TORNADO DEBRIS", "TORNADO", data$EVTYPE)
data$EVTYPE<-sub("(.*)HURRICANE(.*)", "HURRICANE (TYPHOON)", data$EVTYPE)
data$EVTYPE[data$EVTYPE=="FUNNEL CLOUDS"]<-"FUNNEL CLOUD"
data$EVTYPE[(grepl("HAIL", data$EVTYPE)) & (!grepl("MARINE", data$EVTYPE))]<-"HAIL"
data$EVTYPE<-sub("(.*)FIRE(.*)", "WILDFIRE", data$EVTYPE)
data$EVTYPE<-sub("(.*)WINTER WEATHER(.*)", "WINTER WEATHER", data$EVTYPE)
data$EVTYPE<-sub("(.*)TYPHOON(.*)", "HURRICANE (TYPHOON)", data$EVTYPE)
data$EVTYPE[(grepl("SNOW", data$EVTYPE)) & (!grepl("LAKE", data$EVTYPE)) & (!grepl("LIGHT", data$EVTYPE)) & (!grepl("MODERATE", data$EVTYPE))]<-"HEAVY SNOW"
data$EVTYPE[data$EVTYPE=="LAKE EFFECT SNOW"]<-"LAKE-EFFECT SNOW"
data$EVTYPE[data$EVTYPE %in% c("WIND", "WIND DAMAGE", "HIGH WIND (G40)", "HIGH WINDS", "NON-SEVERE WIND DAMAGE", "WINDS", "WND")] <- "HIGH WIND"
data$EVTYPE[data$EVTYPE %in% c("STRONG WINDS", "GUSTY WINDS", "GUSTY WIND", "WHIRLWIND", "WIND GUSTS", "STRONG WIND GUST")] <- "STRONG WIND"
data$EVTYPE<-sub("(.*)VOLCANIC(.*)", "VOLCANIC ASH", data$EVTYPE)
u<-as.data.frame(table(data$EVTYPE))
diff<-u[!(u$Var1 %in% types),]
nrow(diff)
## [1] 92
sum(data$EVTYPE %in% types)
## [1] 590057
At this point, I’m still left with a bunch of 92 names that don’t match any codified event name (e.g. “LIGHT SNOW”) or for which assignation would be arbitrary (e.g. “UNSEASONABLY WARM AND DRY”). As they account just for a small fraction of records (about 1000 over 591000), I discarded them:
data<-data[data$EVTYPE %in% types,]
dim(data)
## [1] 590057 9
The following code prepares data for analysis. In particular:
- Variables were assigned to the correct class
- Economic impact was calculated by reconstructing values in USD from values in exponential notation stored in the dataset
- I created 2 separate dataframes, one for economic impact and one for health impact, each containing only the events with a non-zero impact.
data<-mutate(data, STATE=as.factor(STATE), PROPDMGEXP=as.factor(PROPDMGEXP), CROPDMGEXP=as.factor(CROPDMGEXP))
levels(data$PROPDMGEXP)<-c("0", "1000000000", "1000", "1000000")
levels(data$CROPDMGEXP)<-c("0", "1000000000", "1000", "1000000")
data<-mutate(data, PROPDMGEXP=as.numeric(as.character(PROPDMGEXP)), CROPDMGEXP=as.numeric(as.character(CROPDMGEXP)))
data$prop<-data$PROPDMG*data$PROPDMGEXP
data$crop<-data$CROPDMG*data$CROPDMGEXP
data$econ<-data$prop+data$crop
data$people<-data$INJURIES+data$FATALITIES
ec<-filter(data, econ>0) %>% select(c(BGN_DATE, STATE, EVTYPE, econ, prop, crop))
dim(ec)
length(unique(ec$EVTYPE))
## [1] 174040 6
## [1] 45
peo<-filter(data, people>0) %>% select(c(BGN_DATE, STATE, EVTYPE, people, FATALITIES, INJURIES))
length(unique(peo$EVTYPE))
## [1] 36
As shown, there are 45 types of events with at least one non-zero economic impact, while there are 36 kinds of events with a non-zero impact on people health
Here are the event types that never caused, in the period of interest, any economic damage. I’ll call them the “green events”.
types[!( types %in% unique(ec$EVTYPE))]
## [1] "DEBRIS FLOW" "MARINE THUNDERSTORM WIND"
## [3] "SLEET"
Now, an overview of economic impact on properties and on crops shows that damages to properties are in general higher, at least one order of magnitude. Also, they highest values seem to be related to different types of events:
summary(ec$prop)
summary(ec$crop)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000e+00 2.000e+03 1.000e+04 1.987e+06 3.000e+04 1.150e+11
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000e+00 0.000e+00 0.000e+00 1.958e+05 0.000e+00 1.510e+09
head(ec[order(ec$prop, decreasing=T),])
## BGN_DATE STATE EVTYPE econ prop crop
## 104627 2006-01-01 CA FLOOD 115032500000 1.150e+11 32500000
## 97823 2005-08-29 LA STORM SURGE/TIDE 31300000000 3.130e+10 0
## 97822 2005-08-28 LA HURRICANE (TYPHOON) 16930000000 1.693e+10 0
## 98955 2005-08-29 MS STORM SURGE/TIDE 11260000000 1.126e+10 0
## 95685 2005-10-24 FL HURRICANE (TYPHOON) 10000000000 1.000e+10 0
## 98953 2005-08-28 MS HURRICANE (TYPHOON) 7350000000 7.350e+09 0
head(ec[order(ec$crop, decreasing=T),])
## BGN_DATE STATE EVTYPE econ prop crop
## 98956 2005-08-29 MS HURRICANE (TYPHOON) 7390000000 5.88e+09 1510000000
## 113305 2006-01-01 TX DROUGHT 1000000000 0.00e+00 1000000000
## 20280 1998-12-20 CA EXTREME COLD/WIND CHILL 596000000 0.00e+00 596000000
## 56475 2001-08-01 IA DROUGHT 578850000 0.00e+00 578850000
## 52418 2000-11-01 TX DROUGHT 515000000 0.00e+00 515000000
## 28618 1998-07-06 OK DROUGHT 500000000 0.00e+00 500000000
For those reasons, I decided to treat properties and crop damages separately at a national level, and for both I calculated and plotted the annual mean for each of the event types. Results are plotted in decreasing order. I colored in red the event types that contribute for at least 90% to economic impact, and in yellow the ones with contributed for the remaining 10% (recall that the “green events” are not shown).
#Property damages
prop_yr<-group_by(ec, EVTYPE) %>% summarize(mean=sum(prop)/15/10^9)
prop_yr<-prop_yr[order(prop_yr$mean, decreasing=T),]
prop_yr$EVTYPE<-factor(prop_yr$EVTYPE, levels=prop_yr$EVTYPE[order(prop_yr$mean, decreasing=T)], ordered = T)
# Creating a vector with the cumulative sum of mean values
tot<-numeric()
for (i in 1:nrow(prop_yr)) {
tot[i]<-sum(prop_yr$mean[1:i])
}
#Finding the number of values contributing to the 90% of total
tot90<-tot[length(tot)]*.9
cut<-min(which(tot>tot90))
#Adding to the dataset a variable that separates red events from yellow events
prop_yr$impact<-c(rep("red", cut), rep("yellow", nrow(prop_yr)-cut))
percentage= round(tot[cut]/tot[length(tot)]*100,2)
par(mar=c(20,5.1,20,2.1), mfrow=c(2,1), bg="gray90")
with(prop_yr,barplot(mean ~ EVTYPE, las=2, cex.names=1.5, cex.lab=1.5, cex.axis=1.5, xlab="", ylab="billions ($)", col=impact))
title("Mean property damages per year", cex.main=3)
legend("topright", pch=22, pt.bg=c("red", "yellow"), cex=2, legend=c(paste(percentage, "% of impact"), paste(round(100-percentage,2), "% of impact")))
#Same procedure for crop damages
crop_yr<-group_by(ec, EVTYPE) %>% summarize(mean=sum(crop)/15/10^9)
crop_yr<-crop_yr[order(crop_yr$mean, decreasing=T),]
crop_yr$EVTYPE<-factor(crop_yr$EVTYPE, levels=crop_yr$EVTYPE[order(crop_yr$mean, decreasing=T)], ordered = T)
tot<-numeric()
for (i in 1:nrow(crop_yr)) {
tot[i]<-sum(crop_yr$mean[1:i])
}
tot90<-tot[length(tot)]*.9
cut<-min(which(tot>tot90))
crop_yr$impact<-c(rep("red", cut), rep("yellow", nrow(crop_yr)-cut))
percentage= round(tot[cut]/tot[length(tot)]*100,2)
with(crop_yr,barplot(mean ~ EVTYPE, las=2, cex.names=1.5, cex.lab=1.5, cex.axis=1.5, xlab="", ylab="billions ($)", col=impact))
title("Mean crop damages per year", cex.main=3)
legend("topright", pch=22, pt.bg=c("red", "yellow"), cex=2, legend=c(paste(percentage, "% of impact"), paste(round(100-percentage,2), "% of impact")))
As we can see, the big contributors (“red events”) are a small bunch: 7 for property damages and 8 for crop damages. Some of them are in common, but others are not (for example, Drougth only affects crops).
Here are the event types that never caused, in the period of interest, any effect on people’s health (the “green events”).
types[!( types %in% unique(peo$EVTYPE))]
## [1] "ASTRONOMICAL LOW TIDE" "DEBRIS FLOW"
## [3] "DENSE SMOKE" "FREEZING FOG"
## [5] "LAKE-EFFECT SNOW" "LAKESHORE FLOOD"
## [7] "MARINE HAIL" "MARINE THUNDERSTORM WIND"
## [9] "SEICHE" "SLEET"
## [11] "TROPICAL DEPRESSION" "VOLCANIC ASH"
Now, an overview of impact on health shows that, as expected, injuries are much more frequent than fatal events. Once again, their highest values seem to be related to different types of events.
So, I will follow the same approach as before, analyzing injuries and fatalities separately to identify the red and yellow events.
summary(peo$INJURIES)
summary(peo$FATALITIES)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 0.000 1.000 4.223 2.000 800.000
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.0000 0.0000 0.6519 1.0000 99.0000
head(peo[order(peo$INJURIES, decreasing=T),])
## BGN_DATE STATE EVTYPE people FATALITIES INJURIES
## 2752 1998-10-17 TX FLOOD 802 2 800
## 7215 2004-08-13 FL HURRICANE (TYPHOON) 787 7 780
## 2765 1998-10-17 TX FLOOD 750 0 750
## 2751 1998-10-17 TX FLOOD 611 11 600
## 2755 1998-10-17 TX FLOOD 550 0 550
## 9422 2007-08-04 MO EXCESSIVE HEAT 521 2 519
head(peo[order(peo$FATALITIES, decreasing=T),])
## BGN_DATE STATE EVTYPE people FATALITIES INJURIES
## 3219 1999-07-28 IL EXCESSIVE HEAT 99 99 0
## 3619 1999-07-04 PA EXCESSIVE HEAT 209 74 135
## 8282 2005-09-21 TX EXCESSIVE HEAT 49 49 0
## 8427 2006-07-16 CA EXCESSIVE HEAT 64 46 18
## 3396 1999-07-18 MO EXCESSIVE HEAT 439 42 397
## 8822 2006-08-01 NY EXCESSIVE HEAT 42 42 0
inj_yr<-group_by(peo, EVTYPE) %>% summarize(mean=sum(INJURIES)/15)
inj_yr<-inj_yr[order(inj_yr$mean, decreasing=T),]
inj_yr$EVTYPE<-factor(inj_yr$EVTYPE, levels=inj_yr$EVTYPE[order(inj_yr$mean, decreasing=T)], ordered = T)
tot<-numeric()
for (i in 1:nrow(inj_yr)) {
tot[i]<-sum(inj_yr$mean[1:i])
}
tot90<-tot[length(tot)]*.9
cut<-min(which(tot>tot90))
inj_yr$impact<-c(rep("red", cut), rep("yellow", nrow(inj_yr)-cut))
percentage= round(tot[cut]/tot[length(tot)]*100,2)
par(mar=c(20,5.1,20,2.1), mfrow=c(2,1), bg="gray90")
with(inj_yr,barplot(mean ~ EVTYPE, las=2, cex.names=1.5, cex.lab=1.5, cex.axis=1.5, xlab="", ylab="Number of people", col=impact))
title("Mean injuries per year", cex.main=3)
legend("topright", pch=22, pt.bg=c("red", "yellow"), cex=2, legend=c(paste(percentage, "% of impact"), paste(round(100-percentage,2), "% of impact")))
fat_yr<-group_by(peo, EVTYPE) %>% summarize(mean=sum(FATALITIES)/15)
fat_yr<-fat_yr[order(fat_yr$mean, decreasing=T),]
fat_yr$EVTYPE<-factor(fat_yr$EVTYPE, levels=fat_yr$EVTYPE[order(fat_yr$mean, decreasing=T)], ordered = T)
tot<-numeric()
for (i in 1:nrow(fat_yr)) {
tot[i]<-sum(fat_yr$mean[1:i])
}
tot90<-tot[length(tot)]*.9
cut<-min(which(tot>tot90))
fat_yr$impact<-c(rep("red", cut), rep("yellow", nrow(fat_yr)-cut))
percentage= round(tot[cut]/tot[length(tot)]*100,2)
with(fat_yr,barplot(mean ~ EVTYPE, las=2, cex.names=1.5, cex.lab=1.5, cex.axis=1.5, xlab="", ylab="Number of people", col=impact))
title("Mean number of victimes per year", cex.main=3)
legend("topright", pch=22, pt.bg=c("red", "yellow"), cex=2, legend=c(paste(percentage, "% of impact"), paste(round(100-percentage,2), "% of impact")))
We can see that, among storm events, there are 13 major causes of injuries and 15 major causes of death. Most of them are the same, but their impact can differ (for example, Excessive heat is by far the first cause of fatal events, while it’s the 3rd cause of injuries).
The natural events reported in the Storm database are, obviously, highly influenced by the geographical location. Hence, I’m going to create a table with the principal harmful events divided by state.
For more conciseness, I’m going to consider the overall economic effects (crops + properties), and the overall human health effects (injuries + fatalities). The values used will be once again the average annual impacts for each type of event, and I’ll report the major event types, defined, as before, as the ones whose sum of impacts account for at least 90% of the total. Splitting by state was done according to the 61 values with enough data, out of the 70 codes in the original STATE variable. Here I show the discarded codes, probably not representing actual US states:
ecstate<- group_by(ec, STATE, EVTYPE) %>% summarize(mean=round(sum(econ)/15/10^6,2))
ecstate<-ecstate[order(ecstate$STATE, -(ecstate$mean)),]
peostate<- group_by(peo, STATE, EVTYPE) %>% summarize(mean=round(sum(people)/15,2))
peostate<-peostate[order(peostate$STATE, -(peostate$mean)),]
states<-intersect(unique(peostate$STATE), unique(ecstate$STATE))
original_states[!(original_states %in% states)]
[1] “LC” “PH” “LH” “LE” “SL” “LO” “PM” “PK” “XX”
index90<-function(x) { # Function that, given a numeric vector in decreasing order, finds the number of elements that give at least the 90% of the sum
tot<-numeric()
for (i in 1:length(x)) {
tot[i]<-sum(x[1:i])
}
tot90<-tot[length(tot)]*.9
cut<-min(which(tot>=tot90))
cut
}
# Creating the economic part of the table
indexes<-tapply(ecstate$mean, ecstate$STATE, index90)
indexes[is.na(indexes)]<-0
df_list<-list()
for (i in states) {
df_list[[i]]<-ecstate[ecstate$STATE==i,][1:indexes[i],] #a small df created for each state
}
# Same for the health part of the table
indexes1<-tapply(peostate$mean, peostate$STATE, index90)
indexes1[is.na(indexes1)]<-0
df_list1<-list()
for (i in states) {
df_list1[[i]]<-peostate[peostate$STATE==i,][1:indexes1[i],]
}
# Creating a list of empty df, one for each state, with dimensions that match the juxtaposition of the previous halves (step required because they don't have necessarily the same number of rows)
maxind<-pmax(indexes, indexes1)
df_list2<-list()
for (i in states) {
df_list2[[i]]<-as.data.frame(matrix("",nrow=maxind[i], ncol=5))
}
#Filling the states dataframes
for (i in states) {
df_list2[[i]][1:nrow(df_list[[i]]), 1:3]<-df_list[[i]]
df_list2[[i]][1:nrow(df_list1[[i]]), 4:5]<-df_list1[[i]][,2:3]
}
#Creating a single dataframe and converting it to an html table
tab<-bind_rows(df_list2)
names(tab)<-c("STATE", "MAJOR CAUSES OF ECONOMIC DAMAGES", "ECONOMIC DAMAGES PER YEAR (millions of USD)", "MAJOR CAUSES OF HEALTH DAMAGES", "AVERAGE NUMBER OF PEOPLE INVOLVED PER YEAR")
for(i in 1:length(tab$STATE)) {
if(tab$STATE[i]=="") tab$STATE[i]<-tab$STATE[i-1]
}
tab$STATE<-as.factor(tab$STATE)
levels(tab$STATE)<-states
xt<-xtable(tab)
print(xt, type="html")
| STATE | MAJOR CAUSES OF ECONOMIC DAMAGES | ECONOMIC DAMAGES PER YEAR (millions of USD) | MAJOR CAUSES OF HEALTH DAMAGES | AVERAGE NUMBER OF PEOPLE INVOLVED PER YEAR | |
|---|---|---|---|---|---|
| 1 | AK | FLOOD | 10.38 | AVALANCHE | 3.33 |
| 2 | AK | HIGH WIND | 2.32 | ICE STORM | 2.6 |
| 3 | AK | STORM SURGE/TIDE | 1.66 | HEAVY SNOW | 1.33 |
| 4 | AK | WILDFIRE | 1.01 | HIGH WIND | 1.07 |
| 5 | AK | BLIZZARD | 0.73 | ||
| 6 | AK | WILDFIRE | 0.6 | ||
| 7 | AK | EXTREME COLD/WIND CHILL | 0.27 | ||
| 8 | DE | HURRICANE (TYPHOON) | 259.26 | TORNADO | 80.73 |
| 9 | DE | FLASH FLOOD | 78.41 | THUNDERSTORM WIND | 11.53 |
| 10 | DE | TORNADO | 44.49 | LIGHTNING | 10.47 |
| 11 | DE | EXCESSIVE HEAT | 2.4 | ||
| 12 | ID | THUNDERSTORM WIND | 0.03 | THUNDERSTORM WIND | 1.67 |
| 13 | MI | MARINE HIGH WIND | 0.01 | MARINE STRONG WIND | 1.27 |
| 14 | MI | THUNDERSTORM WIND | 0.01 | THUNDERSTORM WIND | 0.67 |
| 15 | NV | TORNADO | 83.87 | TORNADO | 93.27 |
| 16 | NV | ICE STORM | 45.43 | THUNDERSTORM WIND | 7.13 |
| 17 | NV | FLASH FLOOD | 18.73 | FLASH FLOOD | 4.93 |
| 18 | NV | HAIL | 15.5 | ||
| 19 | NV | FLOOD | 12.62 | ||
| 20 | PZ | TSUNAMI | 5.4 | TSUNAMI | 10.73 |
| 21 | PZ | HURRICANE (TYPHOON) | 4.01 | HURRICANE (TYPHOON) | 1.33 |
| 22 | PZ | FLASH FLOOD | 3.44 | FLASH FLOOD | 0.67 |
| 23 | WI | HAIL | 188.59 | FLASH FLOOD | 13.87 |
| 24 | WI | THUNDERSTORM WIND | 29.78 | DUST STORM | 8.93 |
| 25 | WI | TROPICAL STORM | 13.33 | THUNDERSTORM WIND | 5.8 |
| 26 | WI | LIGHTNING | 5.4 | ||
| 27 | WI | WINTER WEATHER | 3.67 | ||
| 28 | WI | EXCESSIVE HEAT | 3.53 | ||
| 29 | WI | HEAVY SNOW | 3.2 | ||
| 30 | WI | WINTER STORM | 2.47 | ||
| 31 | WV | FLOOD | 7802.33 | WILDFIRE | 65.6 |
| 32 | WV | DENSE FOG | 33.07 | ||
| 33 | WV | EXCESSIVE HEAT | 24.53 | ||
| 34 | WV | HIGH WIND | 9.93 | ||
| 35 | WV | RIP CURRENT | 9.47 | ||
| 36 | WV | HIGH SURF | 8.67 | ||
| 37 | WV | HEAVY RAIN | 6.93 | ||
| 38 | WV | DUST STORM | 6.53 | ||
| 39 | WV | WINTER STORM | 6.07 | ||
| 40 | WV | HEAVY SNOW | 6 | ||
| 41 | WV | WINTER WEATHER | 5.87 | ||
| 42 | WV | FLASH FLOOD | 5.67 | ||
| 43 | WV | FLOOD | 5.6 | ||
| 44 | WY | HAIL | 86.06 | LIGHTNING | 16 |
| 45 | WY | FLASH FLOOD | 25.79 | TORNADO | 8.07 |
| 46 | WY | WILDFIRE | 20.39 | AVALANCHE | 6.67 |
| 47 | WY | TORNADO | 12.21 | FLASH FLOOD | 4.67 |
| 48 | WY | FLOOD | 5.11 | HIGH WIND | 4.53 |
| 49 | WY | THUNDERSTORM WIND | 4.47 | ||
| 50 | WY | DUST STORM | 1.27 | ||
| 51 | WY | EXTREME COLD/WIND CHILL | 1.27 | ||
| 52 | AL | FLOOD | 1.41 | LIGHTNING | 3.47 |
| 53 | AL | HEAVY SNOW | 0.95 | WINTER WEATHER | 3.2 |
| 54 | AL | FLASH FLOOD | 0.73 | THUNDERSTORM WIND | 3.13 |
| 55 | AL | TORNADO | 0.61 | HIGH WIND | 1.53 |
| 56 | AL | THUNDERSTORM WIND | 0.54 | STRONG WIND | 0.33 |
| 57 | AL | HIGH WIND | 0.34 | FLOOD | 0.27 |
| 58 | AM | TROPICAL STORM | 8.35 | EXCESSIVE HEAT | 21.53 |
| 59 | AM | FLASH FLOOD | 1.07 | THUNDERSTORM WIND | 1.73 |
| 60 | AN | COASTAL FLOOD | 3 | HIGH SURF | 4.4 |
| 61 | AN | DROUGHT | 1.94 | EXCESSIVE HEAT | 3.73 |
| 62 | AN | FLASH FLOOD | 1.84 | WINTER STORM | 3 |
| 63 | AN | TROPICAL STORM | 1.18 | RIP CURRENT | 2.67 |
| 64 | AN | WINTER STORM | 0.92 | HEAVY SNOW | 2 |
| 65 | AN | HIGH WIND | 0.73 | WINTER WEATHER | 0.67 |
| 66 | AR | HURRICANE (TYPHOON) | 1984.34 | HURRICANE (TYPHOON) | 56.73 |
| 67 | AR | HIGH WIND | 224.53 | TORNADO | 52.4 |
| 68 | AR | FLOOD | 110.02 | LIGHTNING | 50.8 |
| 69 | AR | TORNADO | 63.61 | RIP CURRENT | 29.93 |
| 70 | AR | THUNDERSTORM WIND | 10.6 | ||
| 71 | AR | WILDFIRE | 7.07 | ||
| 72 | AS | TORNADO | 50.76 | TORNADO | 74.2 |
| 73 | AS | DROUGHT | 47.82 | LIGHTNING | 16.2 |
| 74 | AS | FLOOD | 30.42 | THUNDERSTORM WIND | 9.93 |
| 75 | AS | HAIL | 13.79 | ||
| 76 | AS | FROST/FREEZE | 10.7 | ||
| 77 | AS | THUNDERSTORM WIND | 9.92 | ||
| 78 | AS | FLASH FLOOD | 8.31 | ||
| 79 | AZ | THUNDERSTORM WIND | 0.22 | THUNDERSTORM WIND | 0.07 |
| 80 | CA | HURRICANE (TYPHOON) | 64.64 | HURRICANE (TYPHOON) | 22.8 |
| 81 | CA | RIP CURRENT | 6.2 | ||
| 82 | CA | HEAVY RAIN | 1.8 | ||
| 83 | CO | FLASH FLOOD | 10.41 | HIGH SURF | 3 |
| 84 | CO | HIGH SURF | 1.03 | STRONG WIND | 1.13 |
| 85 | CO | WILDFIRE | 0.8 | ||
| 86 | CO | FLASH FLOOD | 0.73 | ||
| 87 | CO | HIGH WIND | 0.53 | ||
| 88 | CO | FLOOD | 0.4 | ||
| 89 | CT | FLOOD | 191.35 | TORNADO | 29.07 |
| 90 | CT | DROUGHT | 143.65 | THUNDERSTORM WIND | 11.73 |
| 91 | CT | HAIL | 33.27 | FLOOD | 8.27 |
| 92 | CT | THUNDERSTORM WIND | 24.18 | HAIL | 8.13 |
| 93 | CT | TORNADO | 16.6 | LIGHTNING | 2.47 |
| 94 | CT | EXCESSIVE HEAT | 1.6 | ||
| 95 | DC | FLOOD | 7.34 | THUNDERSTORM WIND | 6.2 |
| 96 | DC | THUNDERSTORM WIND | 0.96 | AVALANCHE | 1.47 |
| 97 | DC | HIGH WIND | 0.72 | HIGH WIND | 1.4 |
| 98 | DC | FLASH FLOOD | 0.64 | LIGHTNING | 1.13 |
| 99 | DC | WILDFIRE | 0.5 | WINTER STORM | 1.07 |
| 100 | DC | HEAVY SNOW | 0.93 | ||
| 101 | DC | DUST STORM | 0.73 | ||
| 102 | FL | FLASH FLOOD | 41.54 | EXCESSIVE HEAT | 45.33 |
| 103 | FL | THUNDERSTORM WIND | 39.9 | TORNADO | 31.47 |
| 104 | FL | TORNADO | 24.69 | THUNDERSTORM WIND | 20.27 |
| 105 | FL | DROUGHT | 18.97 | EXTREME COLD/WIND CHILL | 5.73 |
| 106 | FL | FLOOD | 8.28 | LIGHTNING | 4.27 |
| 107 | FL | COLD/WIND CHILL | 2.93 | ||
| 108 | FL | WINTER STORM | 2.8 | ||
| 109 | GA | FLOOD | 101.83 | TORNADO | 39.07 |
| 110 | GA | TORNADO | 27.32 | THUNDERSTORM WIND | 8.4 |
| 111 | GA | FLASH FLOOD | 26.61 | LIGHTNING | 4.93 |
| 112 | GA | HAIL | 5.63 | FLOOD | 2.13 |
| 113 | GM | TORNADO | 48.05 | TORNADO | 31.27 |
| 114 | GM | HAIL | 38.92 | THUNDERSTORM WIND | 9.47 |
| 115 | GM | FLASH FLOOD | 19.66 | WINTER STORM | 3.8 |
| 116 | GM | THUNDERSTORM WIND | 16.71 | ICE STORM | 2.67 |
| 117 | GM | ICE STORM | 12.23 | LIGHTNING | 2.6 |
| 118 | GM | DROUGHT | 9.46 | FLASH FLOOD | 2.4 |
| 119 | GM | FLOOD | 7.88 | HEAVY SNOW | 1.87 |
| 120 | GM | HAIL | 1.8 | ||
| 121 | GM | EXCESSIVE HEAT | 1.4 | ||
| 122 | GU | HAIL | 40.47 | TORNADO | 31.4 |
| 123 | GU | TORNADO | 34.2 | EXCESSIVE HEAT | 9.27 |
| 124 | GU | FLOOD | 34.1 | THUNDERSTORM WIND | 8.93 |
| 125 | GU | FLASH FLOOD | 16.28 | FLASH FLOOD | 3.13 |
| 126 | GU | DROUGHT | 15.07 | HIGH WIND | 2.8 |
| 127 | GU | HIGH WIND | 6.75 | LIGHTNING | 2.53 |
| 128 | HI | STORM SURGE/TIDE | 2121.83 | TORNADO | 32.13 |
| 129 | HI | HURRICANE (TYPHOON) | 1500.4 | THUNDERSTORM WIND | 7.27 |
| 130 | HI | LIGHTNING | 6.73 | ||
| 131 | HI | DENSE FOG | 4.8 | ||
| 132 | HI | EXCESSIVE HEAT | 3.27 | ||
| 133 | IA | THUNDERSTORM WIND | 0.08 | MARINE STRONG WIND | 0.07 |
| 134 | IA | MARINE HIGH WIND | 0.01 | ||
| 135 | IL | THUNDERSTORM WIND | 0.03 | MARINE STRONG WIND | 0.07 |
| 136 | IN | FLOOD | 13.52 | LIGHTNING | 8.73 |
| 137 | IN | HEAVY SNOW | 4.59 | THUNDERSTORM WIND | 6.93 |
| 138 | IN | ICE STORM | 3.03 | HEAVY SNOW | 1.6 |
| 139 | IN | FLASH FLOOD | 1.85 | HIGH WIND | 1.07 |
| 140 | IN | THUNDERSTORM WIND | 1.81 | STRONG WIND | 0.93 |
| 141 | IN | LIGHTNING | 1.35 | ||
| 142 | IN | COASTAL FLOOD | 1.2 | ||
| 143 | KS | TROPICAL STORM | 35.61 | EXCESSIVE HEAT | 33.8 |
| 144 | KS | TORNADO | 17.15 | TROPICAL STORM | 13.4 |
| 145 | KS | DROUGHT | 6.65 | TORNADO | 13.2 |
| 146 | KS | FLOOD | 4.88 | BLIZZARD | 10.13 |
| 147 | KS | FLASH FLOOD | 4.19 | HEAT | 6.33 |
| 148 | KS | STORM SURGE/TIDE | 3.61 | LIGHTNING | 4.87 |
| 149 | KS | DENSE FOG | 2.6 | ||
| 150 | KS | HEAVY RAIN | 2.6 | ||
| 151 | KY | ICE STORM | 21.22 | LIGHTNING | 4.2 |
| 152 | KY | FLOOD | 8.04 | DENSE FOG | 1.6 |
| 153 | KY | COASTAL FLOOD | 1.14 | THUNDERSTORM WIND | 1.07 |
| 154 | KY | HIGH SURF | 0.93 | ||
| 155 | KY | STRONG WIND | 0.53 | ||
| 156 | KY | FLOOD | 0.33 | ||
| 157 | KY | HEAVY RAIN | 0.27 | ||
| 158 | LA | TORNADO | 22.24 | HEAT | 21.07 |
| 159 | LA | THUNDERSTORM WIND | 21.28 | EXCESSIVE HEAT | 18.8 |
| 160 | LA | HAIL | 18.17 | THUNDERSTORM WIND | 17.87 |
| 161 | LA | FLOOD | 15.2 | TORNADO | 10.2 |
| 162 | LA | ICE STORM | 12.61 | LIGHTNING | 6.87 |
| 163 | LA | DROUGHT | 10 | EXTREME COLD/WIND CHILL | 3.27 |
| 164 | LA | FLASH FLOOD | 7.1 | ||
| 165 | LM | FLOOD | 92.83 | TORNADO | 15.13 |
| 166 | LM | HAIL | 66.49 | THUNDERSTORM WIND | 5.4 |
| 167 | LM | THUNDERSTORM WIND | 58.05 | LIGHTNING | 4.13 |
| 168 | LM | TORNADO | 43.08 | FLASH FLOOD | 3.27 |
| 169 | LM | HAIL | 1.67 | ||
| 170 | LM | BLIZZARD | 1.33 | ||
| 171 | LM | STRONG WIND | 1.07 | ||
| 172 | LS | HAIL | 73.78 | EXCESSIVE HEAT | 240.07 |
| 173 | LS | TORNADO | 54.35 | TORNADO | 63.47 |
| 174 | LS | FLOOD | 44.18 | ||
| 175 | LS | FLASH FLOOD | 16.29 | ||
| 176 | LS | THUNDERSTORM WIND | 14.52 | ||
| 177 | MA | HURRICANE (TYPHOON) | 1046.19 | TORNADO | 49.27 |
| 178 | MA | STORM SURGE/TIDE | 751.12 | THUNDERSTORM WIND | 10 |
| 179 | MA | HURRICANE (TYPHOON) | 8 | ||
| 180 | MD | HAIL | 8.14 | WILDFIRE | 2.2 |
| 181 | MD | TORNADO | 4.56 | LIGHTNING | 2.13 |
| 182 | MD | THUNDERSTORM WIND | 1.92 | THUNDERSTORM WIND | 1.8 |
| 183 | MD | WILDFIRE | 1.54 | HIGH WIND | 1.33 |
| 184 | MD | FLASH FLOOD | 1.01 | AVALANCHE | 0.93 |
| 185 | MD | WINTER WEATHER | 0.93 | ||
| 186 | MD | BLIZZARD | 0.67 | ||
| 187 | MD | DUST STORM | 0.6 | ||
| 188 | MD | TORNADO | 0.4 | ||
| 189 | MD | EXTREME COLD/WIND CHILL | 0.33 | ||
| 190 | MD | HAIL | 0.33 | ||
| 191 | ME | HURRICANE (TYPHOON) | 463.59 | TORNADO | 17.33 |
| 192 | ME | FLOOD | 23.24 | LIGHTNING | 14.4 |
| 193 | ME | ICE STORM | 18.61 | WINTER STORM | 12.8 |
| 194 | ME | FLASH FLOOD | 16.43 | THUNDERSTORM WIND | 8.07 |
| 195 | ME | FLASH FLOOD | 3.67 | ||
| 196 | ME | HURRICANE (TYPHOON) | 3.67 | ||
| 197 | ME | RIP CURRENT | 2.93 | ||
| 198 | ME | HIGH WIND | 2.47 | ||
| 199 | ME | FLOOD | 1.6 | ||
| 200 | MN | FLOOD | 244.86 | BLIZZARD | 7 |
| 201 | MN | HAIL | 39.86 | TORNADO | 2.6 |
| 202 | MN | THUNDERSTORM WIND | 27.6 | THUNDERSTORM WIND | 2.07 |
| 203 | MN | BLIZZARD | 14.94 | HIGH WIND | 1.6 |
| 204 | MN | WINTER STORM | 1.6 | ||
| 205 | MN | HAIL | 1 | ||
| 206 | MN | EXTREME COLD/WIND CHILL | 0.6 | ||
| 207 | MN | FLOOD | 0.6 | ||
| 208 | MO | HAIL | 94.78 | TORNADO | 8.73 |
| 209 | MO | DROUGHT | 48 | HAIL | 3.93 |
| 210 | MO | TORNADO | 19.9 | THUNDERSTORM WIND | 2.93 |
| 211 | MO | THUNDERSTORM WIND | 17.76 | WINTER STORM | 2.2 |
| 212 | MO | FLASH FLOOD | 11.11 | HIGH WIND | 1.47 |
| 213 | MO | LIGHTNING | 1.4 | ||
| 214 | MO | DUST STORM | 1.27 | ||
| 215 | MO | ICE STORM | 0.6 | ||
| 216 | MS | ICE STORM | 4.3 | LIGHTNING | 5.27 |
| 217 | MS | FLOOD | 3.36 | STRONG WIND | 1.2 |
| 218 | MS | FLASH FLOOD | 1.46 | THUNDERSTORM WIND | 1.2 |
| 219 | MS | LIGHTNING | 0.67 | HEAVY SNOW | 1.13 |
| 220 | MS | HEAVY SNOW | 0.52 | FLASH FLOOD | 0.53 |
| 221 | MS | TORNADO | 0.4 | ||
| 222 | MT | FLASH FLOOD | 45.43 | EXCESSIVE HEAT | 21.8 |
| 223 | MT | FLOOD | 38.01 | FLASH FLOOD | 13 |
| 224 | MT | DROUGHT | 5.33 | THUNDERSTORM WIND | 9.87 |
| 225 | MT | COASTAL FLOOD | 3.34 | LIGHTNING | 8.6 |
| 226 | MT | THUNDERSTORM WIND | 3.21 | HIGH WIND | 3.73 |
| 227 | MT | WINTER STORM | 2.05 | RIP CURRENT | 3.07 |
| 228 | MT | WINTER STORM | 1.93 | ||
| 229 | MT | STRONG WIND | 1.2 | ||
| 230 | NC | WILDFIRE | 101.5 | TORNADO | 3.47 |
| 231 | NC | HAIL | 7.81 | LIGHTNING | 2.8 |
| 232 | NC | HIGH WIND | 2.07 | ||
| 233 | NC | FLASH FLOOD | 1.33 | ||
| 234 | NC | THUNDERSTORM WIND | 1.13 | ||
| 235 | NC | DUST STORM | 0.53 | ||
| 236 | NC | HEAVY RAIN | 0.53 | ||
| 237 | ND | FLOOD | 45.04 | FLOOD | 3.53 |
| 238 | ND | FLASH FLOOD | 3.74 | DUST STORM | 3.27 |
| 239 | ND | HEAT | 3 | ||
| 240 | ND | HIGH WIND | 2.13 | ||
| 241 | ND | WINTER STORM | 1.33 | ||
| 242 | ND | FLASH FLOOD | 1 | ||
| 243 | ND | LIGHTNING | 0.93 | ||
| 244 | ND | EXCESSIVE HEAT | 0.8 | ||
| 245 | ND | STRONG WIND | 0.8 | ||
| 246 | NE | FLASH FLOOD | 93.03 | THUNDERSTORM WIND | 14.93 |
| 247 | NE | FLOOD | 26.78 | LIGHTNING | 13.4 |
| 248 | NE | THUNDERSTORM WIND | 16.85 | TORNADO | 9.47 |
| 249 | NE | HIGH WIND | 11.13 | HIGH WIND | 7.33 |
| 250 | NE | TORNADO | 9.46 | EXCESSIVE HEAT | 5.73 |
| 251 | NE | HEAVY SNOW | 8.47 | HAIL | 5.47 |
| 252 | NE | ICE STORM | 6.47 | FLOOD | 2.6 |
| 253 | NE | HAIL | 6.01 | FLASH FLOOD | 2.47 |
| 254 | NE | RIP CURRENT | 2.2 | ||
| 255 | NE | HEAVY SNOW | 1.6 | ||
| 256 | NH | FLASH FLOOD | 81.9 | TORNADO | 20.2 |
| 257 | NH | WINTER STORM | 61.56 | THUNDERSTORM WIND | 10.13 |
| 258 | NH | HIGH WIND | 42.64 | LIGHTNING | 9 |
| 259 | NH | HAIL | 40.74 | HIGH WIND | 5.33 |
| 260 | NH | TORNADO | 34.68 | WINTER STORM | 3.93 |
| 261 | NH | FLOOD | 30.32 | DENSE FOG | 2.53 |
| 262 | NH | DROUGHT | 13.33 | FLASH FLOOD | 2.13 |
| 263 | NJ | TORNADO | 115.7 | TORNADO | 88.67 |
| 264 | NJ | DROUGHT | 75.31 | THUNDERSTORM WIND | 12.2 |
| 265 | NJ | THUNDERSTORM WIND | 59.69 | EXCESSIVE HEAT | 12.07 |
| 266 | NJ | ICE STORM | 45.87 | FLASH FLOOD | 11.87 |
| 267 | NJ | HEAT | 8.2 | ||
| 268 | NM | FLOOD | 47.25 | HIGH WIND | 4 |
| 269 | NM | HIGH WIND | 6.54 | ICE STORM | 2.33 |
| 270 | NM | HAIL | 2.58 | HEAVY SNOW | 1.6 |
| 271 | NM | FLOOD | 1.53 | ||
| 272 | NM | WINTER STORM | 1.47 | ||
| 273 | NM | DENSE FOG | 1.2 | ||
| 274 | NM | HIGH SURF | 1 | ||
| 275 | NM | AVALANCHE | 0.87 | ||
| 276 | NM | LIGHTNING | 0.8 | ||
| 277 | NM | THUNDERSTORM WIND | 0.67 | ||
| 278 | NM | DUST STORM | 0.53 | ||
| 279 | NM | WILDFIRE | 0.47 | ||
| 280 | NY | FLASH FLOOD | 90.26 | EXCESSIVE HEAT | 40.8 |
| 281 | NY | FLOOD | 40.21 | THUNDERSTORM WIND | 14.33 |
| 282 | NY | DROUGHT | 34.76 | LIGHTNING | 12.27 |
| 283 | NY | THUNDERSTORM WIND | 8.71 | TORNADO | 11.13 |
| 284 | NY | TORNADO | 8.33 | FLOOD | 7.73 |
| 285 | NY | HEAVY SNOW | 7.27 | ||
| 286 | NY | FLASH FLOOD | 6.07 | ||
| 287 | NY | WINTER STORM | 6.07 | ||
| 288 | OH | HURRICANE (TYPHOON) | 151.7 | FLASH FLOOD | 1.8 |
| 289 | OH | FLASH FLOOD | 13.95 | HEAVY RAIN | 1.53 |
| 290 | OH | TROPICAL STORM | 11.81 | HIGH SURF | 1.33 |
| 291 | OH | HURRICANE (TYPHOON) | 1.33 | ||
| 292 | OH | RIP CURRENT | 0.67 | ||
| 293 | OH | THUNDERSTORM WIND | 0.67 | ||
| 294 | OH | LIGHTNING | 0.6 | ||
| 295 | OH | FLOOD | 0.53 | ||
| 296 | OH | STORM SURGE/TIDE | 0.47 | ||
| 297 | OK | MARINE STRONG WIND | 0 | MARINE STRONG WIND | 0.4 |
| 298 | OR | FLOOD | 6.19 | LIGHTNING | 1.2 |
| 299 | OR | HEAVY SNOW | 0.76 | HIGH WIND | 0.33 |
| 300 | OR | HIGH SURF | 0.2 | ||
| 301 | OR | HEAT | 0.13 | ||
| 302 | PA | ICE STORM | 9.88 | TORNADO | 16.07 |
| 303 | PA | TORNADO | 4.41 | THUNDERSTORM WIND | 8 |
| 304 | PA | HURRICANE (TYPHOON) | 3.35 | LIGHTNING | 5.73 |
| 305 | PA | HAIL | 3.27 | EXCESSIVE HEAT | 3.27 |
| 306 | PA | WILDFIRE | 2.67 | ICE STORM | 1.67 |
| 307 | PA | THUNDERSTORM WIND | 2.34 | STRONG WIND | 1.4 |
| 308 | PA | LIGHTNING | 1.57 | RIP CURRENT | 1.27 |
| 309 | PA | EXTREME COLD/WIND CHILL | 1.34 | HAIL | 1.07 |
| 310 | PA | TROPICAL STORM | 1.13 | ||
| 311 | PR | HAIL | 7.54 | TORNADO | 15.13 |
| 312 | PR | THUNDERSTORM WIND | 5.29 | ICE STORM | 5 |
| 313 | PR | BLIZZARD | 4.77 | THUNDERSTORM WIND | 4.8 |
| 314 | PR | TORNADO | 3.99 | HAIL | 2.47 |
| 315 | PR | FLOOD | 2.76 | BLIZZARD | 2.27 |
| 316 | PR | FLASH FLOOD | 2.49 | LIGHTNING | 1.2 |
| 317 | RI | FLOOD | 149.13 | TORNADO | 88.33 |
| 318 | RI | TORNADO | 68.12 | THUNDERSTORM WIND | 11.13 |
| 319 | RI | FLASH FLOOD | 23.99 | LIGHTNING | 5.8 |
| 320 | SC | DROUGHT | 447.69 | FLOOD | 425.73 |
| 321 | SC | TROPICAL STORM | 366.36 | FLASH FLOOD | 48.6 |
| 322 | SC | STORM SURGE/TIDE | 300.03 | TORNADO | 47 |
| 323 | SC | HURRICANE (TYPHOON) | 276.21 | THUNDERSTORM WIND | 20.8 |
| 324 | SC | HAIL | 177.5 | EXCESSIVE HEAT | 17.8 |
| 325 | SC | FLOOD | 64.98 | ||
| 326 | SC | FLASH FLOOD | 62.18 | ||
| 327 | SD | FLOOD | 21.94 | WINTER STORM | 29 |
| 328 | SD | TORNADO | 11.62 | HEAVY SNOW | 15.53 |
| 329 | SD | BLIZZARD | 2.67 | TORNADO | 5.93 |
| 330 | SD | FLASH FLOOD | 2.59 | AVALANCHE | 4.33 |
| 331 | SD | HIGH WIND | 2.09 | BLIZZARD | 3.53 |
| 332 | SD | LIGHTNING | 3.2 | ||
| 333 | SD | HIGH WIND | 2.93 | ||
| 334 | SD | DENSE FOG | 2.53 | ||
| 335 | TN | HURRICANE (TYPHOON) | 46.34 | TORNADO | 20.27 |
| 336 | TN | DROUGHT | 18.7 | EXCESSIVE HEAT | 9.73 |
| 337 | TN | FLASH FLOOD | 15.97 | HIGH WIND | 6 |
| 338 | TN | FLOOD | 11.99 | LIGHTNING | 5.13 |
| 339 | TN | TORNADO | 10.2 | THUNDERSTORM WIND | 4.73 |
| 340 | TN | COASTAL FLOOD | 8.33 | TROPICAL STORM | 2.2 |
| 341 | TN | TROPICAL STORM | 7.39 | FLASH FLOOD | 2.13 |
| 342 | TN | HIGH WIND | 5.59 | ||
| 343 | TN | HAIL | 4.16 | ||
| 344 | TX | HURRICANE (TYPHOON) | 1.88 | HIGH SURF | 0.2 |
| 345 | TX | TROPICAL STORM | 0.42 | RIP CURRENT | 0.2 |
| 346 | TX | FLASH FLOOD | 0.13 | LIGHTNING | 0.13 |
| 347 | TX | STORM SURGE/TIDE | 0.07 | ||
| 348 | UT | FLASH FLOOD | 3.26 | THUNDERSTORM WIND | 1.2 |
| 349 | UT | WINTER STORM | 1.01 | LIGHTNING | 0.73 |
| 350 | UT | THUNDERSTORM WIND | 0.85 | WINTER STORM | 0.53 |
| 351 | UT | FLOOD | 0.74 | FLOOD | 0.4 |
| 352 | UT | HIGH WIND | 0.51 | HIGH WIND | 0.27 |
| 353 | UT | ICE STORM | 0.42 | HEAVY SNOW | 0.13 |
| 354 | VA | HEAVY RAIN | 14.03 | HIGH WIND | 4.67 |
| 355 | VA | FROST/FREEZE | 13.67 | AVALANCHE | 3.8 |
| 356 | VA | FLOOD | 13.58 | HEAVY SNOW | 3.13 |
| 357 | VA | HIGH WIND | 11.86 | LIGHTNING | 1.87 |
| 358 | VA | HAIL | 9.66 | THUNDERSTORM WIND | 1.8 |
| 359 | VA | WILDFIRE | 6.83 | DUST STORM | 1.67 |
| 360 | VA | EXTREME COLD/WIND CHILL | 4.34 | HEAVY RAIN | 1.6 |
| 361 | VA | HEAVY SNOW | 3.35 | WILDFIRE | 0.93 |
| 362 | VA | STRONG WIND | 0.8 | ||
| 363 | VA | HAIL | 0.73 | ||
| 364 | VA | WINTER WEATHER | 0.53 | ||
| 365 | VA | ICE STORM | 0.47 | ||
| 366 | VI | FLASH FLOOD | 74.99 | TORNADO | 13.93 |
| 367 | VI | HAIL | 65.64 | THUNDERSTORM WIND | 11.33 |
| 368 | VI | FLOOD | 40.47 | HEAT | 7.67 |
| 369 | VI | TORNADO | 18.42 | LIGHTNING | 7.27 |
| 370 | VI | THUNDERSTORM WIND | 17.61 | EXCESSIVE HEAT | 4 |
| 371 | VI | EXTREME COLD/WIND CHILL | 2.87 | ||
| 372 | VI | HAIL | 2.73 | ||
| 373 | VI | HIGH WIND | 2.07 | ||
| 374 | VI | HEAVY SNOW | 1.53 | ||
| 375 | VI | FLASH FLOOD | 1.33 | ||
| 376 | VT | FLASH FLOOD | 31.54 | THUNDERSTORM WIND | 2.67 |
| 377 | VT | FLOOD | 19.34 | FLASH FLOOD | 2.2 |
| 378 | VT | THUNDERSTORM WIND | 1.74 | LIGHTNING | 2.13 |
| 379 | VT | HAIL | 1.59 | TORNADO | 1.67 |
| 380 | VT | DROUGHT | 1.32 | FLOOD | 0.93 |
| 381 | VT | HEAVY RAIN | 0.73 | ||
| 382 | VT | HIGH WIND | 0.53 | ||
| 383 | VT | EXCESSIVE HEAT | 0.4 | ||
| 384 | WA | HAIL | 7.48 | WINTER STORM | 8.33 |
| 385 | WA | FLOOD | 0.85 | LIGHTNING | 5.13 |
| 386 | WA | FLASH FLOOD | 0.66 | AVALANCHE | 2.53 |
| 387 | WA | BLIZZARD | 0.5 | TORNADO | 1.4 |
| 388 | WA | TORNADO | 0.4 | HIGH WIND | 1.2 |
| 389 | WA | WILDFIRE | 0.8 | ||
| 390 | WA | THUNDERSTORM WIND | 0.67 |
As expected, there are big differences between states, both in the type of events and in the amount of damages they trigger.