--- title: "Dates" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Dates} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` In this example, we start with a data frame with two columns, one with full dates and one with partial dates. The goal is to consolidate these dates into one ISO 8601 formatted date column. ```{r example1, message=FALSE} library(sdtmval) library(dplyr) raw_dates <- data.frame( raw_full = c( rep(NA, 8), "02/05/2017", "02-05-2017" ), raw_partial = c( "UN-UNK-UNKN", "UN/UNK/UNKN", "UN UNK UNKN", "UN-UNK-2017", "UN-Feb-2017", "05-FEB-2017", "05-UNK-2017", "05-Feb-UNKN", rep(NA, 2) ) ) knitr::kable(raw_dates) ``` First, we will re-arrange the partial dates into the same format as the full dates using `reshape_pdates()`. That will let us combine the full and partial dates into one column with a MM/DD/YYYY format. Then, using `reshape_adates()`, we will convert all dates to the YYYY-MM-DD format. ```{r example2} working_dates <- raw_dates %>% mutate( partial = reshape_pdates(raw_partial), all = coalesce(raw_full, partial), all = reshape_adates(all) ) knitr::kable(working_dates) ``` For situations where missing date elements should be removed, use the `trim_dates()` function. ```{r example3} trimmed_dates <- mutate(working_dates, trimmed = trim_dates(all)) knitr::kable(trimmed_dates) ``` If imputed dates are needed, use the `impute_pdates()` function. Both start and end dates can be imputed using standard imputation rules. ```{r example4} imputed_dates <- working_dates %>% mutate( start = impute_pdates(all, ptype = "start"), end = impute_pdates(all, ptype = "end") ) knitr::kable(imputed_dates) ```