R/rowwise_has_data.R

Defines functions missing_all_data missing_any_data has_all_data has_any_data

Documented in has_all_data has_any_data missing_all_data missing_any_data

#' Test rowwise if each row is missing / has all data in select columns
#'
#' @inheritParams dplyr::select
#' @param .name Name of the new column with the logical index.
#'
#' @examplesIf require("dplyr")
#' data(mtcars)
#'
#' mtcars[1, 1] <- NA
#' mtcars[2, ] <- NA
#'
#' mtcars[1:3, 1:3] |>
#'   has_any_data(mpg:disp, .name = "has_any") |>
#'   has_all_data(mpg:disp, .name = "has_all") |>
#'   missing_any_data(mpg:disp, .name = "missing_any") |>
#'   missing_all_data(mpg:disp, .name = "missing_all")
#'
#' @export
has_any_data <- function(.data, ..., .name) {
  .check_namespace("dplyr")
  .data[[.name]] <- apply(!is.na(dplyr::select(.data, ...)), 1, any)
  .data
}

#' @export
#' @rdname has_any_data
has_all_data <- function(.data, ..., .name) {
  .check_namespace("dplyr")
  .data[[.name]] <- stats::complete.cases(dplyr::select(.data, ...))
  .data
}

#' @export
#' @rdname has_any_data
missing_any_data <- function(.data, ..., .name) {
  .check_namespace("dplyr")
  .data[[.name]] <- !stats::complete.cases(dplyr::select(.data, ...))
  .data
}

#' @export
#' @rdname has_any_data
missing_all_data <- function(.data, ..., .name) {
  .data1 <- has_all_data(.data, ..., .name = .name)
  .data2 <- has_any_data(.data, ..., .name = .name)
  .data1[[.name]] <- !.data1[[.name]] & !.data2[[.name]]
  .data1
}
mattansb/MSBMisc documentation built on March 22, 2023, 6:02 p.m.