R/partition.R

Defines functions carve partition

partition <- function(.data, variable, amount) {
  y <- rlang::enquo(variable)
  z <- rlang::enquo(amount)

  key <- .data %>%
    dplyr::arrange(!!y) %>%
    dplyr::filter(I) %>%
    dplyr::mutate(lower = !!y - !!z,
                  upper = !!y + !!z,
                  overlaps_prev = lower < dplyr::lag(upper, default = lower[[1]]),
                  chunk = cumsum(!overlaps_prev)) %>%
    dplyr::group_by(chunk) %>%
    dplyr::summarise(lower = min(lower),
                     upper = max(upper))

  purrr::pmap_dfr(.l = list(chunk = key$chunk, upper = key$upper, lower = key$lower), .f = carve, .data = .data, variable = !!y)
}

carve <- function(chunk, upper, lower, .data, variable) {
  y <- rlang::enquo(variable)
  .data %>%
    dplyr::filter(!!y > lower,
                  !!y < upper) %>%
    dplyr::mutate(chunk = chunk)
}
scmck17/sift documentation built on Jan. 12, 2021, 9:26 a.m.