tests/testthat/test-calc_longterm_monthly_stats.R

context("Calc longterm monthly stats")

test_that("creates a dataframe with the proper columns", {
  skip_on_cran()
  skip_on_ci()
  data <- calc_longterm_monthly_stats(station_number = "08NM116", start_year = 1980)
  expect_true(is.data.frame(data) &
                all(c("Month","Mean","Median","Maximum","Minimum") %in% colnames(data)))
})

test_that("outputs data for two stations", {
  skip_on_cran()
  skip_on_ci()
  data <- calc_longterm_monthly_stats(station_number = c("08NM116","08HB048"), start_year = 1980)
  expect_true(length(unique(data$STATION_NUMBER)) == 2)
})

test_that("creates a dataframe with custom columns", {
  skip_on_cran()
  skip_on_ci()
  data <- calc_longterm_monthly_stats(station_number = "08NM116", start_year = 1980,
                                      percentiles = c(25,75))
  expect_true(all(c("P25","P75") %in% colnames(data)))
})

test_that("produces NA if there is missing data and warning is produced", {
  skip_on_cran()
  skip_on_ci()
  data <- suppressWarnings(calc_longterm_monthly_stats(station_number = "08NM116",
                                                       ignore_missing = FALSE))
  expect_true(any(is.na(data)))
  expect_warning(calc_longterm_monthly_stats(station_number = "08NM116",
                                             ignore_missing = FALSE))
})

test_that("ignore_missing calculates all data", {
  skip_on_cran()
  skip_on_ci()
  data <- calc_longterm_monthly_stats(station_number = "08NM116",
                                      ignore_missing = TRUE)
  expect_true(any(!is.na(data)))
})

test_that("data calculated properly", {
  skip_on_cran()
  skip_on_ci()
  ignore_missing <- TRUE
  data <- calc_longterm_monthly_stats(station_number = "08NM116", start_year = 1980, 
                                      ignore_missing = ignore_missing)
  data <- dplyr::select(data, -STATION_NUMBER)
  
  annual <- calc_annual_stats(station_number = "08NM116", start_year = 1980, 
                              ignore_missing = ignore_missing)
  annual <- dplyr::rename(annual, Annual_Mean = Mean)
  annual <- dplyr::mutate(annual, Month = "Annual") 
  annual <- dplyr::group_by(annual, Month)
  annual <- dplyr::summarise(annual, 
                             Mean = mean(Annual_Mean, na.rm = ignore_missing),
                             Median = median(Annual_Mean, na.rm = ignore_missing),
                             Maximum = max(Annual_Mean, na.rm = ignore_missing),
                             Minimum = min(Annual_Mean, na.rm = ignore_missing),
                             P10 = ifelse(!is.na(Mean), quantile(Annual_Mean, 0.1, na.rm = ignore_missing), NA),
                             P90 = ifelse(!is.na(Mean), quantile(Annual_Mean, 0.9, na.rm = ignore_missing), NA))
  month <- calc_monthly_stats(station_number = "08NM116", start_year = 1980, 
                              ignore_missing = ignore_missing)
  month <- dplyr::rename(month, Month_Mean = Mean)
  month <- dplyr::group_by(month, Month)
  month <- dplyr::summarise(month, 
                            Mean = mean(Month_Mean, na.rm = ignore_missing),
                            Median = median(Month_Mean, na.rm = ignore_missing),
                            Maximum = max(Month_Mean, na.rm = ignore_missing),
                            Minimum = min(Month_Mean, na.rm = ignore_missing),
                            P10 = ifelse(!is.na(Mean), quantile(Month_Mean, 0.1, na.rm = ignore_missing), NA),
                            P90 = ifelse(!is.na(Mean), quantile(Month_Mean, 0.9, na.rm = ignore_missing), NA))
  month <- rbind(month, annual)
  
  expect_equal(data, month)
})


test_that("data calculated properly when ignore_missing", {
  skip_on_cran()
  skip_on_ci()
  ignore_missing <- FALSE
  data <- suppressWarnings(calc_longterm_monthly_stats(station_number = "08HB048", 
                                                       ignore_missing = ignore_missing))
  data <- dplyr::select(data, -STATION_NUMBER)
  
  annual <- suppressWarnings(calc_annual_stats(station_number = "08HB048", 
                                               ignore_missing = ignore_missing))
  annual <- dplyr::rename(annual, Annual_Mean = Mean)
  annual <- dplyr::mutate(annual, Month = "Annual") 
  annual <- dplyr::group_by(annual, Month)
  annual <- dplyr::summarise(annual, 
                             Mean = mean(Annual_Mean, na.rm = ignore_missing),
                             Median = median(Annual_Mean, na.rm = ignore_missing),
                             Maximum = max(Annual_Mean, na.rm = ignore_missing),
                             Minimum = min(Annual_Mean, na.rm = ignore_missing),
                             P10 = ifelse(!is.na(Mean), quantile(Annual_Mean, 0.1, na.rm = ignore_missing), NA),
                             P90 = ifelse(!is.na(Mean), quantile(Annual_Mean, 0.9, na.rm = ignore_missing), NA))
  month <- suppressWarnings(calc_monthly_stats(station_number = "08HB048", 
                                               ignore_missing = ignore_missing))
  month <- dplyr::rename(month, Month_Mean = Mean)
  month <- dplyr::group_by(month, Month)
  month <- dplyr::summarise(month, 
                            Mean = mean(Month_Mean, na.rm = ignore_missing),
                            Median = median(Month_Mean, na.rm = ignore_missing),
                            Maximum = max(Month_Mean, na.rm = ignore_missing),
                            Minimum = min(Month_Mean, na.rm = ignore_missing),
                            P10 = ifelse(!is.na(Mean), quantile(Month_Mean, 0.1, na.rm = ignore_missing), NA),
                            P90 = ifelse(!is.na(Mean), quantile(Month_Mean, 0.9, na.rm = ignore_missing), NA))
  month <- rbind(month, annual)
  
  expect_equal(data, month)
})

test_that("data is summarized by water years properly", {
  skip_on_cran()
  skip_on_ci()
  data <- calc_longterm_monthly_stats(station_number = "08NM116",
                                      start_year = 1981,
                                      end_year = 2010,
                                      water_year_start = 10)
  expect_true(data$Month[1] == "Oct")
})

test_that("data is filtered by months properly, and include longterm is removed", {
  skip_on_cran()
  skip_on_ci()
  data <- calc_longterm_monthly_stats(station_number = "08NM116",
                                      start_year = 1981,
                                      months = 7:9,
                                      include_annual = FALSE)
  expect_true(all(data$Month %in% c("Jul","Aug","Sep")))
})

test_that("transpose properly transposed the results", {
  skip_on_cran()
  skip_on_ci()
  data <- calc_longterm_monthly_stats(station_number = "08NM116",
                                      transpose = TRUE,
                                      complete_years = TRUE)
  expect_true(all(c("Mean","Median","Maximum","Minimum") %in% data$Statistic))
})

Try the fasstr package in your browser

Any scripts or data that you put into this service are public.

fasstr documentation built on March 31, 2023, 10:25 p.m.