Dataset

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.1     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(lubridate)
library(knitr)
load("Ozone_Drought_Final.RData")

ozn <- combinedAir.final

## Calculating Number of MonitorID with Severe Drought
ozn_sum <- ozn %>%
    group_by(MonitorID) %>%
    reframe(count = n(),
        sev_count = sum(USDM.categorical == "SevereDrought" &
            Max.Ozone > 0),
        pct_sev = as.numeric((sev_count/count) * 100)) %>%
    ungroup()

## Total observations
sum(ozn_sum$count)
## [1] 6608332
## Total observations with Severe Drought
sum(ozn_sum$sev_count)
## [1] 611475

Percentage of Observations with SevereDrought per MonitorID

ozn_sum1 <- ozn_sum %>%
    mutate(pct_group = case_when(pct_sev == 0 ~ "NoSevere",
        pct_sev > 0 & pct_sev <= 1 ~ "<1%",
        pct_sev > 1 & pct_sev <= 2 ~ "<2%",
        pct_sev > 2 & pct_sev <= 3 ~ "<3%",
        pct_sev > 3 & pct_sev <= 4 ~ "<4%",
        pct_sev > 4 & pct_sev <= 5 ~ "<5%",
        pct_sev > 5 & pct_sev <= 6 ~ "<6%",
        pct_sev > 6 & pct_sev <= 7 ~ "<7%",
        pct_sev > 7 & pct_sev <= 8 ~ "<8%",
        pct_sev > 8 & pct_sev <= 9 ~ "<9%",
        pct_sev > 9 & pct_sev <= 10 ~ "<10%",
        TRUE ~ ">10%")
        )
## NoSevere means No Severe Drought observations for the MonitorID
## <1% means less than 1% Severe Drought observations for the MonitorID
head(ozn_sum1)
## # A tibble: 6 × 5
##   MonitorID count sev_count pct_sev pct_group
##   <chr>     <int>     <int>   <dbl> <chr>    
## 1 010030010  4389       392    8.93 <9%      
## 2 010270001  1925       335   17.4  >10%     
## 3 010331002  4155       182    4.38 <5%      
## 4 010331003   137         0    0    NoSevere 
## 5 010499991  2749       210    7.64 <8%      
## 6 010510001  3966       695   17.5  >10%

Percentage Group

ozn_sum2 <- ozn_sum1 %>%
    group_by(pct_group) %>%
    summarize(count = n()) %>%
    ungroup() %>%
    mutate(pct = round((count/sum(count)) * 100, 2))

kable(ozn_sum2, caption = "Percentage Group", align = c("c", "c", "c"))
Percentage Group
pct_group count pct
<1% 85 4.33
<10% 50 2.55
<2% 140 7.13
<3% 104 5.30
<4% 67 3.41
<5% 63 3.21
<6% 53 2.70
<7% 70 3.57
<8% 48 2.45
<9% 47 2.39
>10% 566 28.83
NoSevere 670 34.13