Title: A Tidy Toolbox for Climate Extreme Indices
Version: 1.0.0
URL: https://github.com/Mauritia-flexuosa/tidyextreme
BugReports: https://github.com/Mauritia-flexuosa/tidyextreme/issues
Description: Calculate Expert Team on Climate Change Detection and Indices (ETCCDI) <– (acronym) climate indices from daily or hourly temperature and precipitation data. Provides flexible data handling.
Depends: R (≥ 4.1.0)
License: MIT + file LICENSE
Encoding: UTF-8
Imports: dplyr (≥ 1.0.0), lubridate (≥ 1.8.0), zoo (≥ 1.8.0), data.table (≥ 1.14.0), cli (≥ 3.0.0), rlang (≥ 1.0.0), tidyselect (≥ 1.2.1)
Suggests: testthat (≥ 3.0.0), knitr, rmarkdown, ggplot2, tidyr, DT, tibble
RoxygenNote: 7.3.3
Config/testthat/edition: 3
VignetteBuilder: knitr
NeedsCompilation: no
Packaged: 2026-02-01 21:18:45 UTC; mcure
Author: Marcio Baldissera Cure [aut, cre, cph]
Maintainer: Marcio Baldissera Cure <marciobcure@gmail.com>
Repository: CRAN
Date/Publication: 2026-02-04 18:00:03 UTC

Aggregate hourly data to daily precipitation statistics

Description

Aggregate hourly data to daily precipitation statistics

Usage

aggregate_hourly_precipitation(
  df_hourly,
  time_col = "datetime",
  precip_col = "precipitation",
  tz = "UTC"
)

Arguments

df_hourly

Data frame with hourly precipitation data

time_col

Name of the datetime column (must be POSIXct) (string)

precip_col

Name of the hourly precipitation column (string)

tz

Timezone (default: "UTC")

Value

A tibble with columns: date, prcp


Aggregate hourly data to daily temperature statistics

Description

Aggregate hourly data to daily temperature statistics

Usage

aggregate_hourly_temperature(
  df_hourly,
  time_col = "datetime",
  temp_col = "temperature",
  tz = "UTC"
)

Arguments

df_hourly

Data frame with hourly temperature data

time_col

Name of the datetime column (must be POSIXct) (string)

temp_col

Name of the hourly temperature column (string)

tz

Timezone (default: "UTC")

Value

A tibble with columns: date, tmax, tmin


Calculate consecutive dry days (CDD)

Description

Calculates statistics for dry spells (consecutive days with precipitation < 1 mm), following ETCCDI definition CDD.

Usage

calculate_CDD(
  df,
  frequency = "daily",
  time_col = NULL,
  prcp_col = NULL,
  precip_col = NULL,
  dry_threshold = 1
)

Arguments

df

Data frame with precipitation data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). Must be in a format recognizable by lubridate (e.g., Date for daily data, POSIXct for hourly data). Recommended formats: - Daily: YYYY-MM-DD (e.g., "2023-01-15") - Hourly: YYYY-MM-DD HH:MM:SS (e.g., "2023-01-15 14:30:00")

prcp_col

Name of precipitation column (daily data) (string)

precip_col

Name of precipitation column (hourly data) (string)

dry_threshold

Threshold for dry day in mm (default: 1)

Value

A data.frame with columns: year, CDD_max, CDD_mean, CDD_median, n_dry_spells

Examples

# Daily precipitation data
daily_prcp <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  rainfall = pmax(0, rgamma(1096, shape = 0.5, scale = 10))
)

# Calculate consecutive dry days statistics
calculate_CDD(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall"
)

# With custom dry threshold (0.5mm instead of 1mm)
calculate_CDD(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall",
  dry_threshold = 0.5
)

Calculate Cold Spell Duration Index (CSDI)

Description

Calculates the number of days with at least 6 consecutive days where temperature is below the 10th percentile, following ETCCDI definition CSDI.

Usage

calculate_CSDI(
  df,
  frequency = "daily",
  time_col = NULL,
  tmin_col = NULL,
  temp_col = NULL,
  window_days = 30,
  min_consecutive = 6
)

Arguments

df

Data frame with climate data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

tmin_col

Name of minimum temperature column (daily data) (string)

temp_col

Name of temperature column (for single temp or hourly) (string)

window_days

Window size for percentile calculation (default: 30)

min_consecutive

Minimum consecutive days for cold spell (default: 6)

Value

A tibble with columns: year, CSDI, n_spells, mean_spell_length

Examples

# Daily data with minimum temperature
set.seed(123)
daily_data <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  tmin = 15 + 8 * sin(seq(0, 4*pi, length.out = 1096)) + rnorm(1096, 0, 3)
)

calculate_CSDI(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmin_col = "tmin"
)

# With custom window and consecutive days
calculate_CSDI(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmin_col = "tmin",
  window_days = 15,
  min_consecutive = 5
)

Calculate consecutive wet days (CWD)

Description

Calculates statistics for wet spells (consecutive days with precipitation \geq 1 mm), following ETCCDI definition CWD.

Usage

calculate_CWD(
  df,
  frequency = "daily",
  time_col = NULL,
  prcp_col = NULL,
  precip_col = NULL,
  wet_threshold = 1
)

Arguments

df

Data frame with precipitation data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). Must be in a format recognizable by lubridate (e.g., Date for daily data, POSIXct for hourly data). Recommended formats: - Daily: YYYY-MM-DD (e.g., "2023-01-15") - Hourly: YYYY-MM-DD HH:MM:SS (e.g., "2023-01-15 14:30:00")

prcp_col

Name of precipitation column (daily data) (string)

precip_col

Name of precipitation column (hourly data) (string)

wet_threshold

Threshold for wet day in mm (default: 1)

Value

A data.frame with columns: year, CWD_max, CWD_mean, CWD_median, n_wet_spells

Examples

# Daily precipitation data
daily_prcp <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  rainfall = pmax(0, rgamma(1096, shape = 0.5, scale = 10))
)

# Calculate consecutive wet days statistics
calculate_CWD(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall"
)

# With custom wet threshold (5mm instead of 1mm)
calculate_CWD(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall",
  wet_threshold = 5
)

Calculate diurnal temperature range (DTR)

Description

Calculates the mean and standard deviation of daily temperature range (difference between maximum and minimum temperature) per year.

Usage

calculate_DTR(
  df,
  frequency = "daily",
  time_col = NULL,
  tmax_col = NULL,
  tmin_col = NULL,
  temp_col = NULL
)

Arguments

df

Data frame with climate data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

tmax_col

Name of maximum temperature column (daily data) (string)

tmin_col

Name of minimum temperature column (daily data) (string)

temp_col

Name of temperature column (hourly data) (string)

Value

A tibble with columns: year, DTR_mean, DTR_sd, n_days

Examples

# Daily data with maximum and minimum temperature
daily_data <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  tmax = rnorm(1096, mean = 25, sd = 5),
  tmin = rnorm(1096, mean = 15, sd = 5)
)

calculate_DTR(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmax_col = "tmax",
  tmin_col = "tmin"
)

Calculate annual precipitation totals and statistics

Description

Calculates comprehensive annual precipitation statistics including total precipitation, number of wet days, mean daily precipitation, and maximum daily precipitation.

Usage

calculate_PRCPstats(
  df,
  frequency = "daily",
  time_col = NULL,
  prcp_col = NULL,
  precip_col = NULL,
  wet_threshold = 1
)

Arguments

df

Data frame with precipitation data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). Must be in a format recognizable by lubridate (e.g., Date for daily data, POSIXct for hourly data). Recommended formats: - Daily: YYYY-MM-DD (e.g., "2023-01-15") - Hourly: YYYY-MM-DD HH:MM:SS (e.g., "2023-01-15 14:30:00")

prcp_col

Name of precipitation column (daily data) (string)

precip_col

Name of precipitation column (hourly data) (string)

wet_threshold

Threshold for wet day in mm (default: 1)

Value

A data.frame with columns: year, PRCP_total, PRCP_days, PRCP_mean, PRCP_max

Examples

# Daily precipitation data
daily_prcp <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  rainfall = pmax(0, rgamma(1096, shape = 0.5, scale = 10))
)

# Calculate comprehensive precipitation statistics
calculate_PRCPstats(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall"
)

# With custom wet threshold (2mm instead of 1mm)
calculate_PRCPstats(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall",
  wet_threshold = 2
)

# Hourly precipitation data (converted to daily)
hourly_prcp <- data.frame(
  datetime = seq(
    as.POSIXct("2000-01-01 00:00", tz = "UTC"),
    as.POSIXct("2000-01-31 23:00", tz = "UTC"),
    by = "hour"
  ),
  precip = pmax(0, rgamma(31*24, shape = 0.3, scale = 2))
)

calculate_PRCPstats(
  df = hourly_prcp,
  frequency = "hourly",
  time_col = "datetime",
  precip_col = "precip"
)

Calculate number of heavy precipitation days (R10mm)

Description

Counts the number of days per year when precipitation \geq 10 mm, following ETCCDI definition R10mm.

Usage

calculate_R10mm(
  df,
  frequency = "daily",
  time_col = NULL,
  prcp_col = NULL,
  precip_col = NULL,
  threshold = 10
)

Arguments

df

Data frame with precipitation data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). Must be in a format recognizable by lubridate (e.g., Date for daily data, POSIXct for hourly data). Recommended formats: - Daily: YYYY-MM-DD (e.g., "2023-01-15") - Hourly: YYYY-MM-DD HH:MM:SS (e.g., "2023-01-15 14:30:00")

prcp_col

Name of precipitation column (daily data) (string)

precip_col

Name of precipitation column (hourly data) (string)

threshold

Precipitation threshold in mm (default: 10)

Value

A data.frame with columns: year, R10mm

Examples

# Daily precipitation data
daily_prcp <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  rainfall = pmax(0, rgamma(1096, shape = 0.5, scale = 10))
)

# Calculate number of days with precipitation \eqn{\geq} 10mm
calculate_R10mm(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall"
)

# With custom threshold (15mm instead of 10mm)
calculate_R10mm(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall",
  threshold = 15
)

Calculate number of days with precipitation \geq 1mm (R1mm)

Description

Counts the number of days per year when precipitation \geq 1 mm, representing wet days.

Usage

calculate_R1mm(
  df,
  frequency = "daily",
  time_col = NULL,
  prcp_col = NULL,
  precip_col = NULL,
  threshold = 1
)

Arguments

df

Data frame with precipitation data

frequency

Temporal frequency: "daily" or "hourly"

time_col

Name of the time column (string). Must be in a format recognizable by lubridate (e.g., Date for daily data, POSIXct for hourly data). Recommended formats: - Daily: YYYY-MM-DD (e.g., "2023-01-15") - Hourly: YYYY-MM-DD HH:MM:SS (e.g., "2023-01-15 14:30:00")

prcp_col

Name of precipitation column (daily data) (string)

precip_col

Name of precipitation column (hourly data) (string)

threshold

Precipitation threshold in mm (default: 1)

Value

A data.frame with columns: year, R1mm

Examples

# Daily precipitation data
daily_prcp <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  rainfall = pmax(0, rgamma(1096, shape = 0.5, scale = 10))
)

# Calculate number of days with precipitation \eqn{\geq} 1mm (wet days)
calculate_R1mm(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall"
)

# With custom threshold (0.5mm instead of 1mm)
calculate_R1mm(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall",
  threshold = 0.5
)

Calculate number of very heavy precipitation days (R20mm)

Description

Counts the number of days per year when precipitation \geq 20 mm, following ETCCDI definition R20mm.

Usage

calculate_R20mm(
  df,
  frequency = "daily",
  time_col = NULL,
  prcp_col = NULL,
  precip_col = NULL,
  threshold = 20
)

Arguments

df

Data frame with precipitation data

frequency

Temporal frequency: "daily" or "hourly"

time_col

Name of the time column (string). Must be in a format recognizable by lubridate (e.g., Date for daily data, POSIXct for hourly data). Recommended formats: - Daily: YYYY-MM-DD (e.g., "2023-01-15") - Hourly: YYYY-MM-DD HH:MM:SS (e.g., "2023-01-15 14:30:00")

prcp_col

Name of precipitation column (daily data) (string)

precip_col

Name of precipitation column (hourly data) (string)

threshold

Precipitation threshold in mm (default: 20)

Value

A data.frame with columns: year, R20mm

Examples

# Daily precipitation data
daily_prcp <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  rainfall = pmax(0, rgamma(1096, shape = 0.5, scale = 10))
)

# Calculate number of days with precipitation \eqn{\geq} 20mm
calculate_R20mm(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall"
)

# With custom threshold (25mm instead of 20mm)
calculate_R20mm(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall",
  threshold = 25
)


Calculate maximum 1-day precipitation (Rx1day)

Description

Calculates the annual maximum 1-day precipitation amount, following ETCCDI definition Rx1day.

Usage

calculate_Rx1day(
  df,
  frequency = "daily",
  time_col = NULL,
  prcp_col = NULL,
  precip_col = NULL,
  min_valid_years = 1
)

Arguments

df

Data frame with precipitation data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

prcp_col

Name of precipitation column (daily data) (string)

precip_col

Name of precipitation column (hourly data) (string)

min_valid_years

Minimum years with valid data (default: 1)

Value

A data.frame with columns: year, Rx1day

Examples

# Daily precipitation data
daily_prcp <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  rainfall = pmax(0, rgamma(1096, shape = 0.5, scale = 10))
)

calculate_Rx1day(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall"
)


Calculate maximum consecutive 5-day precipitation (Rx5day)

Description

Calculates the annual maximum precipitation amount accumulated over 5 consecutive days, following ETCCDI definition Rx5day.

Usage

calculate_Rx5day(
  df,
  frequency = "daily",
  time_col = NULL,
  prcp_col = NULL,
  precip_col = NULL
)

Arguments

df

Data frame with precipitation data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). Must be in a format recognizable by lubridate (e.g., Date for daily data, POSIXct for hourly data). Recommended formats: - Daily: YYYY-MM-DD (e.g., "2023-01-15") - Hourly: YYYY-MM-DD HH:MM:SS (e.g., "2023-01-15 14:30:00")

prcp_col

Name of precipitation column (daily data) (string)

precip_col

Name of precipitation column (hourly data) (string)

Value

A data.frame with columns: year, Rx5day

Examples

# Daily precipitation data
daily_prcp <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  rainfall = pmax(0, rgamma(1096, shape = 0.5, scale = 10))
)

# Calculate maximum 5-day precipitation
calculate_Rx5day(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall"
)

# Hourly precipitation data (converted to daily)
hourly_prcp <- data.frame(
  datetime = seq(
    as.POSIXct("2000-01-01 00:00", tz = "UTC"),
    as.POSIXct("2000-01-31 23:00", tz = "UTC"),
    by = "hour"
  ),
  precip = pmax(0, rgamma(31*24, shape = 0.3, scale = 2))
)

calculate_Rx5day(
  df = hourly_prcp,
  frequency = "hourly",
  time_col = "datetime",
  precip_col = "precip"
)

Calculate Simple Daily Intensity Index (SDII)

Description

Calculates the mean precipitation amount on wet days (\geq 1 mm), following ETCCDI definition SDII.

Usage

calculate_SDII(
  df,
  frequency = "daily",
  time_col = NULL,
  prcp_col = NULL,
  precip_col = NULL,
  wet_threshold = 1
)

Arguments

df

Data frame with precipitation data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). Must be in a format recognizable by lubridate (e.g., Date for daily data, POSIXct for hourly data). Recommended formats: - Daily: YYYY-MM-DD (e.g., "2023-01-15") - Hourly: YYYY-MM-DD HH:MM:SS (e.g., "2023-01-15 14:30:00")

prcp_col

Name of precipitation column (daily data) (string)

precip_col

Name of precipitation column (hourly data) (string)

wet_threshold

Threshold for wet day in mm (default: 1)

Value

A data.frame with columns: year, SDII, wet_days, total_prcp

Examples

# Daily precipitation data
daily_prcp <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  rainfall = pmax(0, rgamma(1096, shape = 0.5, scale = 10))
)

# Calculate Simple Daily Intensity Index
calculate_SDII(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall"
)

# With custom wet threshold (5mm instead of 1mm)
calculate_SDII(
  df = daily_prcp,
  frequency = "daily",
  time_col = "date",
  prcp_col = "rainfall",
  wet_threshold = 5
)

Calculate number of days with temperature < 0^\circC

Description

Counts the number of days per year when daily temperature is less than 0^\circC.

Usage

calculate_TN0(
  df,
  frequency = "daily",
  time_col = NULL,
  tmin_col = NULL,
  temp_col = NULL
)

Arguments

df

Data frame with climate data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

tmin_col

Name of minimum temperature column (daily data) (string)

temp_col

Name of temperature column (for single temp or hourly) (string)

Value

A tibble with columns: year, TN0

Examples

# Daily data with minimum temperature
daily_data <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  tmin = rnorm(1096, mean = 5, sd = 5)
)

calculate_TN0(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmin_col = "tmin"
)

Calculate 10th percentile of daily temperature (TN10p)

Description

Calculates the 10th percentile of daily temperature per year, used as threshold for extreme cold nights.

Usage

calculate_TN10p(
  df,
  frequency = "daily",
  time_col = NULL,
  tmin_col = NULL,
  temp_col = NULL
)

Arguments

df

Data frame with climate data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

tmin_col

Name of minimum temperature column (daily data) (string)

temp_col

Name of temperature column (for single temp or hourly) (string)

Value

A tibble with columns: year, TN10p

Examples

# Daily data with minimum temperature
daily_data <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  tmin = rnorm(1096, mean = 10, sd = 5)
)

calculate_TN10p(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmin_col = "tmin"
)

Calculate monthly minimum value of daily minimum temperature (TNn)

Description

Calculates the lowest daily minimum temperature for each month, following ETCCDI definition TNn.

Usage

calculate_TNn(
  df,
  frequency = "daily",
  time_col = NULL,
  tmin_col = NULL,
  temp_col = NULL,
  min_days = 20
)

Arguments

df

Data frame with climate data

frequency

Temporal frequency: "daily" or "hourly"

time_col

Name of the time column. For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

tmin_col

Name of minimum temperature column (daily data)

temp_col

Name of temperature column (for single temp or hourly)

min_days

Minimum days per month for valid calculation (default: 20)

Value

A tibble with columns: year, month, TNn

Examples

# Daily data with minimum temperature
daily_data <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  tmin = rnorm(1096, mean = 10, sd = 5)
)

calculate_TNn(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmin_col = "tmin"
)

# With custom minimum days per month
calculate_TNn(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmin_col = "tmin",
  min_days = 25
)

Calculate number of tropical nights (TN > 20^\circC)

Description

Counts the number of days per year when daily minimum temperature exceeds 20^\circC, following ETCCDI definition TR20.

Usage

calculate_TR20(
  df,
  frequency = "daily",
  time_col = NULL,
  tmin_col = NULL,
  temp_col = NULL,
  threshold = 20
)

Arguments

df

Data frame with climate data

frequency

Temporal frequency: "daily" or "hourly"

time_col

Name of the time column. For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

tmin_col

Name of minimum temperature column (daily data)

temp_col

Name of temperature column (for single temp or hourly)

threshold

Temperature threshold in ^\circC (default: 20)

Value

A tibble with columns: year, TR20

Examples

# Daily data with separate min temperature
daily_data <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  tmin = rnorm(1096, mean = 18, sd = 5)
)

calculate_TR20(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmin_col = "tmin"
)

# Hourly data (will be aggregated to daily min temperature)
hourly_data <- data.frame(
  datetime = seq(
    as.POSIXct("2000-01-01 00:00", tz = "UTC"),
    as.POSIXct("2000-01-31 23:00", tz = "UTC"),
    by = "hour"
  ),
  temperature = rnorm(31*24, mean = 16, sd = 3)
)

calculate_TR20(
  df = hourly_data,
  frequency = "hourly",
  time_col = "datetime",
  temp_col = "temperature",
  threshold = 20
)

Calculate number of summer days (TX > 25^\circC)

Description

Counts the number of days per year when daily maximum temperature exceeds 25^\circC, following ETCCDI definition SU25.

Usage

calculate_TX25(
  df,
  frequency = "daily",
  time_col = NULL,
  tmax_col = NULL,
  temp_col = NULL,
  threshold = 25
)

Arguments

df

Data frame with climate data

frequency

Temporal frequency: "daily" or "hourly"

time_col

Name of the time column. For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

tmax_col

Name of maximum temperature column (daily data)

temp_col

Name of temperature column (for single temp or hourly)

threshold

Temperature threshold in ^\circC (default: 25)

Value

A tibble with columns: year, TX25

Examples

# Daily data with separate max/min
daily_data <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  tmax = rnorm(1096, mean = 25, sd = 6)
)

calculate_TX25(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmax_col = "tmax"
)

# Hourly data
hourly_data <- data.frame(
  datetime = seq(
    as.POSIXct("2000-01-01 00:00", tz = "UTC"),
    as.POSIXct("2000-01-31 23:00", tz = "UTC"),
    by = "hour"
  ),
  temperature = rnorm(31*24, mean = 22, sd = 4)
)

calculate_TX25(
  df = hourly_data,
  frequency = "hourly",
  time_col = "datetime",
  temp_col = "temperature",
  threshold = 25
)


Calculate number of days with temperature \geq 30^\circC

Description

Counts the number of days per year when daily temperature is greater than or equal to 30^\circC.

Usage

calculate_TX30(
  df,
  frequency = "daily",
  time_col = NULL,
  tmax_col = NULL,
  temp_col = NULL
)

Arguments

df

Data frame with climate data

frequency

Temporal frequency: "daily" or "hourly"

time_col

Name of the time column. For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

tmax_col

Name of maximum temperature column (daily data)

temp_col

Name of temperature column (for single temp or hourly)

Value

A tibble with columns: year, TX30

Examples

# Daily data with maximum temperature
daily_data <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  tmax = rnorm(1096, mean = 25, sd = 6)
)

calculate_TX30(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmax_col = "tmax"
)

Calculate number of days with temperature \geq 35^\circC

Description

Counts the number of days per year when daily temperature is greater than or equal to 35^\circC.

Usage

calculate_TX35(
  df,
  frequency = "daily",
  time_col = NULL,
  tmax_col = NULL,
  temp_col = NULL
)

Arguments

df

Data frame with climate data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

tmax_col

Name of maximum temperature column (daily data) (string)

temp_col

Name of temperature column (for single temp or hourly) (string)

Value

A tibble with columns: year, TX35

Examples

# Daily data with maximum temperature
daily_data <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  tmax = rnorm(1096, mean = 25, sd = 6)
)

calculate_TX35(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmax_col = "tmax"
)

Calculate 90th percentile of daily temperature (TX90p)

Description

Calculates the 90th percentile of daily temperature per year, used as threshold for extreme warm days.

Usage

calculate_TX90p(
  df,
  frequency = "daily",
  time_col = NULL,
  tmax_col = NULL,
  temp_col = NULL
)

Arguments

df

Data frame with climate data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

tmax_col

Name of maximum temperature column (daily data) (string)

temp_col

Name of temperature column (for single temp or hourly) (string)

Value

A tibble with columns: year, TX90p

Examples

# Daily data with maximum temperature
daily_data <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  tmax = rnorm(1096, mean = 25, sd = 6)
)

calculate_TX90p(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmax_col = "tmax"
)

Calculate monthly maximum value of daily maximum temperature (TXx)

Description

Calculates the highest daily maximum temperature for each month, following ETCCDI definition TXx.

Usage

calculate_TXx(
  df,
  frequency = "daily",
  time_col = NULL,
  tmax_col = NULL,
  temp_col = NULL,
  min_days = 20
)

Arguments

df

Data frame with climate data

frequency

Temporal frequency: "daily" or "hourly"

time_col

Name of the time column. For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

tmax_col

Name of maximum temperature column (daily data)

temp_col

Name of temperature column (for single temp or hourly)

min_days

Minimum days per month for valid calculation (default: 20)

Value

A tibble with columns: year, month, TXx

Examples

# Daily data with maximum temperature
daily_data <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  tmax = rnorm(1096, mean = 25, sd = 6)
)

calculate_TXx(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmax_col = "tmax"
)

# With custom minimum days per month
calculate_TXx(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmax_col = "tmax",
  min_days = 25
)

Calculate Warm Spell Duration Index (WSDI)

Description

Calculates the number of days with at least 6 consecutive days where temperature exceeds the 90th percentile, following ETCCDI definition WSDI.

Usage

calculate_WSDI(
  df,
  frequency = "daily",
  time_col = NULL,
  tmax_col = NULL,
  temp_col = NULL,
  window_days = 30,
  min_consecutive = 6
)

Arguments

df

Data frame with climate data

frequency

Temporal frequency: "daily" or "hourly" (string)

time_col

Name of the time column (string). For daily frequency, the column should be of class Date or a string in the format YYYY-MM-DD. For hourly frequency, the column should be of class POSIXct or a string in the format YYYY-MM-DD HH:MM:SS.

tmax_col

Name of maximum temperature column (daily data) (string)

temp_col

Name of temperature column (for single temp or hourly) (string)

window_days

Window size for percentile calculation (default: 30)

min_consecutive

Minimum consecutive days for warm spell (default: 6)

Value

A tibble with columns: year, WSDI, n_spells, mean_spell_length

Examples

# Daily data with maximum temperature
set.seed(123)
daily_data <- data.frame(
  date = seq(as.Date("2000-01-01"), as.Date("2002-12-31"), by = "day"),
  tmax = 25 + 10 * sin(seq(0, 4*pi, length.out = 1096)) + rnorm(1096, 0, 5)
)

calculate_WSDI(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmax_col = "tmax"
)

# With custom window and consecutive days
calculate_WSDI(
  df = daily_data,
  frequency = "daily",
  time_col = "date",
  tmax_col = "tmax",
  window_days = 15,
  min_consecutive = 5
)

List available climate indices

Description

List available climate indices

Usage

list_indices()

Value

A data frame with available indices and descriptions

mirror server hosted at Truenetwork, Russian Federation.