Calculates annual n-day minimum and maximum values, and the day of year and date of occurrence of daily flow values from a daily streamflow data set. Calculates statistics from all values, unless specified. Returns a tibble with statistics.

```
calc_annual_extremes(
data,
dates = Date,
values = Value,
groups = STATION_NUMBER,
station_number,
roll_days = 1,
roll_days_min = NA,
roll_days_max = NA,
roll_align = "right",
water_year_start = 1,
start_year,
end_year,
exclude_years,
months = 1:12,
months_min = NA,
months_max = NA,
transpose = FALSE,
complete_years = FALSE,
ignore_missing = FALSE,
allowed_missing = ifelse(ignore_missing, 100, 0)
)
```

- data
Data frame of daily data that contains columns of dates, flow values, and (optional) groups (e.g. station numbers). Leave blank or set to

`NULL`

if using`station_number`

argument.- dates
Name of column in

`data`

that contains dates formatted YYYY-MM-DD. Only required if dates column name is not 'Date' (default). Leave blank or set to`NULL`

if using`station_number`

argument.- values
Name of column in

`data`

that contains numeric flow values, in units of cubic metres per second. Only required if values column name is not 'Value' (default). Leave blank if using`station_number`

argument.- groups
Name of column in

`data`

that contains unique identifiers for different data sets, if applicable. Only required if groups column name is not 'STATION_NUMBER'. Function will automatically group by a column named 'STATION_NUMBER' if present. Remove the 'STATION_NUMBER' column beforehand to remove this grouping. Leave blank if using`station_number`

argument.- station_number
Character string vector of seven digit Water Survey of Canada station numbers (e.g.

`"08NM116"`

) of which to extract daily streamflow data from a HYDAT database. Requires`tidyhydat`

package and a HYDAT database. Leave blank if using`data`

argument.- roll_days
Numeric value of the number of days to apply a rolling mean. Default

`1`

.- roll_days_min
Numeric value of the number of days to apply a rolling mean for low flows. Will override 'roll_days' argument for low flows. Default

`NA`

.- roll_days_max
Numeric value of the number of days to apply a rolling mean for high flows. Will override 'roll_days' argument for high flows. Default

`NA`

.- roll_align
Character string identifying the direction of the rolling mean from the specified date, either by the first (

`'left'`

), last (`'right'`

), or middle (`'center'`

) day of the rolling n-day group of observations. Default`'right'`

.- water_year_start
Numeric value indicating the month (

`1`

through`12`

) of the start of water year for analysis. Default`1`

.- start_year
Numeric value of the first year to consider for analysis. Leave blank or set well before start date (i.e.

`1800`

) to use from the first year of the source data.- end_year
Numeric value of the last year to consider for analysis. Leave blank or set well after end date (i.e.

`2100`

) to use up to the last year of the source data.- exclude_years
Numeric vector of years to exclude from analysis. Leave blank or set to

`NULL`

to include all years.- months
Numeric vector of months to include in analysis. For example,

`3`

for March,`6:8`

for Jun-Aug or`c(10:12,1)`

for first four months (Oct-Jan) when`water_year_start = 10`

(Oct). Default summarizes all months (`1:12`

).- months_min
Numeric vector of specified months for window of low flows (3 for March, 6:8 for Jun-Aug). Will override 'months' argument for low flows. Default

`NA`

.- months_max
Numeric vector of specified months for window of high flows (3 for March, 6:8 for Jun-Aug). Will override 'months' argument for high flows. Default

`NA`

.- transpose
Logical value indicating whether to transpose rows and columns of results. Default

`FALSE`

.- complete_years
Logical values indicating whether to include only years with complete data in analysis. Default

`FALSE`

.- ignore_missing
Logical value indicating whether dates with missing values should be included in the calculation. If

`TRUE`

then a statistic will be calculated regardless of missing dates. If`FALSE`

then only those statistics from time periods with no missing dates will be returned. Default`FALSE`

.- allowed_missing
Numeric value between 0 and 100 indicating the

**percentage**of missing dates allowed to be included to calculate a statistic (0 to 100 percent). If`'ignore_missing = FALSE'`

then it defaults to`0`

(zero missing dates allowed), if`'ignore_missing = TRUE'`

then it defaults to`100`

(any missing dates allowed); consistent with`ignore_missing`

usage. Supersedes`ignore_missing`

when used.

A tibble data frame with the following columns:

- Year
calendar or water year selected

- Min_'n'_Day
annual minimum for selected n-day rolling mean, direction of mean specified by roll_align

- Min_'n'_Day_DoY
day of year for selected annual minimum of n-day rolling mean

- Min_'n'_Day_Date
date (YYYY-MM-DD) for selected annual minimum of n-day rolling mean

- Max_'n'_Day
annual maximum for selected n-day rolling mean, direction of mean specified by roll_align

- Max_'n'_Day_DoY
day of year for selected annual maximum of n-day rolling mean

- Max_'n'_Day_Date
date (YYYY-MM-DD) for selected annual maximum of n-day rolling mean

Default columns:

- Min_1_Day
annual 1-day mean minimum (roll_align = right)

- Min_1_Day_DoY
day of year of annual 1-day mean minimum

- Min_1_Day_Date
date (YYYY-MM-DD) of annual 1-day mean minimum

- Max_1_Day
annual 1-day mean maximum (roll_align = right)

- Max_1_Day_DoY
day of year of annual 1-day mean maximum

- Max_1_Day_Date
date (YYYY-MM-DD) of annual 1-day mean maximum

Transposing data creates a column of 'Statistics' and subsequent columns for each year selected. 'Date' statistics not transposed.

```
# Run if HYDAT database has been downloaded (using tidyhydat::download_hydat())
if (file.exists(tidyhydat::hy_downloaded_db())) {
# Calculate annual 1-day (default) max/min flow data with
# default alignment ('right')
calc_annual_extremes(station_number = "08NM116")
# Calculate custom 3-day max/min flow data with 'center' alignment
calc_annual_extremes(station_number = "08NM116",
roll_days = 3,
roll_align = "center",
start_year = 1980)
}
#> Warning: One or more calculations included missing values and NA's were produced. If desired, filter data for complete years or months, or use the 'ignore_missing' or 'allowed_missing' arguments (if applicable) to ignore or allow some missing values.
#> Warning: One or more calculations included missing values and NA's were produced. If desired, filter data for complete years or months, or use the 'ignore_missing' or 'allowed_missing' arguments (if applicable) to ignore or allow some missing values.
#> # A tibble: 41 × 8
#> STATION_NUMBER Year Min_3_Day Min_3_…¹ Min_3_Da…² Max_3…³ Max_3…⁴ Max_3_Da…⁵
#> <chr> <dbl> <dbl> <dbl> <date> <dbl> <dbl> <date>
#> 1 08NM116 1980 0.632 9 1980-01-09 34.8 127 1980-05-06
#> 2 08NM116 1981 0.468 260 1981-09-17 54.6 142 1981-05-22
#> 3 08NM116 1982 0.883 6 1982-01-06 50.7 186 1982-07-05
#> 4 08NM116 1983 0.562 357 1983-12-23 57.7 149 1983-05-29
#> 5 08NM116 1984 0.742 365 1984-12-30 50.4 166 1984-06-14
#> 6 08NM116 1985 0.429 190 1985-07-09 49.2 144 1985-05-24
#> 7 08NM116 1986 0.663 50 1986-02-19 70.8 150 1986-05-30
#> 8 08NM116 1987 0.339 333 1987-11-29 31.9 122 1987-05-02
#> 9 08NM116 1988 0.150 32 1988-02-01 32.4 135 1988-05-14
#> 10 08NM116 1989 0.524 271 1989-09-28 34.2 153 1989-06-02
#> # … with 31 more rows, and abbreviated variable names ¹Min_3_Day_DoY,
#> # ²Min_3_Day_Date, ³Max_3_Day, ⁴Max_3_Day_DoY, ⁵Max_3_Day_Date
```