R/data_functions.R

library(dplyr)
library(tidyr)
library(stringr)


#' coalesce_join
#'
#' @param data_initial
#'
#' @return
#' @export
#'
#' @examples
coalesce_join <- function(x, y,
					 by = NULL, suffix = c(".x", ".y"),
					 join = dplyr::full_join, ...) {
	joined <- join(x, y, by = by, suffix = suffix, ...)
	# names of desired output
	cols <- union(names(x), names(y))

	to_coalesce <- names(joined)[!names(joined) %in% cols]
	suffix_used <- suffix[ifelse(endsWith(to_coalesce, suffix[1]), 1, 2)]
	# remove suffixes and deduplicate
	to_coalesce <- unique(substr(
		to_coalesce,
		1,
		nchar(to_coalesce) - nchar(suffix_used)
	))

	coalesced <- purrr::map_dfc(to_coalesce, ~dplyr::coalesce(
		joined[[paste0(.x, suffix[1])]],
		joined[[paste0(.x, suffix[2])]]
	))
	names(coalesced) <- to_coalesce

	dplyr::bind_cols(joined, coalesced)[cols]
}
cablespk/lwnnr documentation built on June 9, 2019, 1:50 a.m.