From dc586fbff06f484096c13a82dfadc95b2c78a89c Mon Sep 17 00:00:00 2001 From: Koen Hufkens Date: Wed, 7 Feb 2024 15:42:52 +0100 Subject: [PATCH] new functions --- NAMESPACE | 2 + R/merge_normalized_differences.R | 57 +++++++++++++++++++++++++++++ R/normalized_difference.R | 16 ++++++++ man/merge_normalized_differences.Rd | 19 ++++++++++ man/normalized_difference.Rd | 20 ++++++++++ 5 files changed, 114 insertions(+) create mode 100644 R/merge_normalized_differences.R create mode 100644 R/normalized_difference.R create mode 100644 man/merge_normalized_differences.Rd create mode 100644 man/normalized_difference.Rd diff --git a/NAMESPACE b/NAMESPACE index 562ed4a..8e66561 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,5 +1,7 @@ # Generated by roxygen2: do not edit by hand export(align_events) +export(merge_normalized_differences) +export(normalized_difference) export(read_appeears) export(read_ml_data) diff --git a/R/merge_normalized_differences.R b/R/merge_normalized_differences.R new file mode 100644 index 0000000..0d7b57a --- /dev/null +++ b/R/merge_normalized_differences.R @@ -0,0 +1,57 @@ + +#' Merge / calculate difference ratios +#' +#' Calculate normalized difference ratios +#' for all possible "sur_refl" band combinations +#' +#' @param ml_df a machine learning data frame with "sur_refl" prefix column +#' names apply the band ratios to +#' +#' @return A machine learning data frame with normalized band ratios appended +#' @export + +merge_normalized_differences <- function(ml_df){ + + # split out surface reflectance values + sur_refl <- ml_df |> + dplyr::select( + starts_with("sur_refl") + ) + + # calculate all normalized difference ratios + ndr <- lapply(names(sur_refl), function(band){ + + # split out reference band + band_1 <- sur_refl |> + dplyr::select( + all_of(band) + ) + + # mutate over all other collumns + df <- sur_refl |> + dplyr::select( + !all_of(band) + ) + + # wrangle all column names + cols <- gsub("sur_refl_", "", names(df)) + ref_col <- gsub("sur_refl_", "", names(band_1)) + + df <- df |> + dplyr::transmute_all( + function(x){as.vector(normalized_difference(band_1, x))} + ) + + # add clean column names + colnames(df) <- paste(ref_col, cols, sep = "_") + return(df) + }) + + # bind columns in one big tibble + ndr <- dplyr::bind_cols(ndr) + + # merge with original data + ml_df <- bind_cols(ml_df, ndr) +} + + diff --git a/R/normalized_difference.R b/R/normalized_difference.R new file mode 100644 index 0000000..39e53f0 --- /dev/null +++ b/R/normalized_difference.R @@ -0,0 +1,16 @@ + +#' Normalized difference +#' +#' Calculates normalized difference for two (arbitrary) bands. The difference +#' is taken as band 1 - band 2 +#' +#' @param band_1 first band +#' @param band_2 second band +#' +#' @return normalized difference index for two bands +#' @export + +normalized_difference <- function(band_1, band_2){ + ndr <- (band_1 - band_2)/(band_1 + band_2) + as.matrix(ndr) +} diff --git a/man/merge_normalized_differences.Rd b/man/merge_normalized_differences.Rd new file mode 100644 index 0000000..fa0980c --- /dev/null +++ b/man/merge_normalized_differences.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/merge_normalized_differences.R +\name{merge_normalized_differences} +\alias{merge_normalized_differences} +\title{Merge / calculate difference ratios} +\usage{ +merge_normalized_differences(ml_df) +} +\arguments{ +\item{ml_df}{a machine learning data frame with "sur_refl" prefix column +names apply the band ratios to} +} +\value{ +A machine learning data frame with normalized band ratios appended +} +\description{ +Calculate normalized difference ratios +for all possible "sur_refl" band combinations +} diff --git a/man/normalized_difference.Rd b/man/normalized_difference.Rd new file mode 100644 index 0000000..b6ac13e --- /dev/null +++ b/man/normalized_difference.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/normalized_difference.R +\name{normalized_difference} +\alias{normalized_difference} +\title{Normalized difference} +\usage{ +normalized_difference(band_1, band_2) +} +\arguments{ +\item{band_1}{first band} + +\item{band_2}{second band} +} +\value{ +normalized difference index for two bands +} +\description{ +Calculates normalized difference for two (arbitrary) bands. The difference +is taken as band 1 - band 2 +}