## ----setup, include = FALSE--------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 5 ) ## ----load--------------------------------------------------------------------- library(rainerosr) ## ----example_data------------------------------------------------------------- storm_data <- data.frame( datetime = as.POSIXct(c( "2024-01-15 14:00:00", "2024-01-15 14:10:00", "2024-01-15 14:20:00", "2024-01-15 14:30:00", "2024-01-15 14:40:00", "2024-01-15 14:50:00", "2024-01-15 15:00:00" )), rainfall_mm = c(2.5, 5.8, 8.2, 6.1, 3.4, 2.0, 1.5) ) print(storm_data) ## ----calc_i30----------------------------------------------------------------- i30_result <- calculate_i30(storm_data, "datetime", "rainfall_mm") print(i30_result) ## ----calc_ei30---------------------------------------------------------------- ei30_result <- calculate_ei30(storm_data, "datetime", "rainfall_mm") print(ei30_result) ## ----ke_equations------------------------------------------------------------- # Brown & Foster (default) ei30_bf <- calculate_ei30(storm_data, "datetime", "rainfall_mm", ke_equation = "brown_foster") # Wischmeier & Smith ei30_ws <- calculate_ei30(storm_data, "datetime", "rainfall_mm", ke_equation = "wischmeier") # McGregor & Mutchler ei30_mm <- calculate_ei30(storm_data, "datetime", "rainfall_mm", ke_equation = "mcgregor_mutchler") # Compare results comparison <- data.frame( Equation = c("Brown & Foster", "Wischmeier", "McGregor & Mutchler"), EI30 = c(ei30_bf$ei30, ei30_ws$ei30, ei30_mm$ei30), Energy = c(ei30_bf$total_energy, ei30_ws$total_energy, ei30_mm$total_energy) ) print(comparison) ## ----multi_events------------------------------------------------------------- # Create data with two storms multi_storm <- data.frame( datetime = as.POSIXct(c( # Storm 1 "2024-03-10 09:00:00", "2024-03-10 09:15:00", "2024-03-10 09:30:00", "2024-03-10 09:45:00", # Storm 2 (10 hours later) "2024-03-10 19:00:00", "2024-03-10 19:20:00", "2024-03-10 19:40:00", "2024-03-10 20:00:00" )), rainfall_mm = c( 4.5, 7.2, 9.1, 5.3, # Storm 1 6.8, 10.2, 8.5, 4.9 # Storm 2 ) ) # Process all events events_summary <- process_storm_events( multi_storm, "datetime", "rainfall_mm", min_gap_hours = 6, min_rainfall_mm = 10, calculate_ei30 = TRUE ) print(events_summary) ## ----validation--------------------------------------------------------------- validation <- validate_rainfall_data(storm_data, "datetime", "rainfall_mm") if (validation$valid) { cat("✓ Data validation passed\n") } else { cat("✗ Data validation failed:\n") print(validation$issues) } if (length(validation$warnings) > 0) { cat("\nWarnings:\n") print(validation$warnings) } ## ----plot_pattern, fig.width=7, fig.height=5---------------------------------- plot_rainfall_pattern(storm_data, "datetime", "rainfall_mm", plot_type = "both", title = "Storm Event - January 15, 2024") ## ----plot_intensity, fig.width=7, fig.height=5-------------------------------- plot_intensity_profile(storm_data, "datetime", "rainfall_mm", highlight_i30 = TRUE, title = "Rainfall Intensity Profile") ## ----explicit_intervals------------------------------------------------------- data_with_intervals <- data.frame( time = as.POSIXct(c( "2024-01-01 10:00:00", "2024-01-01 10:05:00", "2024-01-01 10:15:00", "2024-01-01 10:30:00" )), depth = c(3.2, 5.1, 4.8, 2.9), interval = c(5, 5, 10, 15) # minutes ) result <- calculate_i30(data_with_intervals, "time", "depth", "interval") print(result) ## ----custom_events------------------------------------------------------------ data_with_event_id <- data.frame( datetime = as.POSIXct(c( "2024-01-01 10:00", "2024-01-01 10:15", "2024-01-01 11:00", "2024-01-01 11:15" )), rainfall_mm = c(6, 8, 7, 9), event_id = c(1, 1, 2, 2) ) events <- process_storm_events( data_with_event_id, "datetime", "rainfall_mm", event_col = "event_id" ) print(events) ## ----workflow, eval=FALSE----------------------------------------------------- # # 1. Load your data # my_data <- read.csv("rainfall_data.csv") # my_data$datetime <- as.POSIXct(my_data$datetime) # # # 2. Validate the data # validation <- validate_rainfall_data(my_data, "datetime", "rainfall_mm") # if (!validation$valid) { # stop("Data validation failed") # } # # # 3. Process multiple events # events <- process_storm_events( # my_data, # "datetime", # "rainfall_mm", # min_gap_hours = 6, # min_rainfall_mm = 12.7, # calculate_ei30 = TRUE, # ke_equation = "brown_foster" # ) # # # 4. Analyze results # summary(events$ei30) # mean_erosivity <- mean(events$ei30) # # # 5. Visualize individual storms # for (evt_id in unique(events$event_id)) { # evt_data <- my_data[my_data$event_id == evt_id, ] # p <- plot_intensity_profile(evt_data, "datetime", "rainfall_mm") # print(p) # } # # # 6. Export results # write.csv(events, "erosivity_results.csv", row.names = FALSE)