if(!("dplyr" %in% installed.packages())) install.packages("dplyr")
library(dplyr)
if(!("dplyr" %in% installed.packages())) install.packages("dplyr")
library(xtable)

Synopsis

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.

Loading and Processing the Raw data

Labels of event types

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

Other processing steps

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

Results

Economic damages

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).

Damages on people

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).

Analysis of major causes of economic and health damages by state

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.