## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----library, eval = requireNamespace("tidyverse")---------------------------- library(tidyverse) ## ----setup, include = FALSE, eval = requireNamespace("tidyverse")------------- forecasts_full <- tribble( ~City, ~Forecast, ~ForecastDate, "New York", 20, "2023-09-28", "Los Angeles", 23, "2023-09-28", "Seattle", 16, "2023-09-28", "Houston", 34, "2023-09-28", "New York", 18, "2023-09-29", "Los Angeles", 25, "2023-09-29", "Seattle", 17, "2023-09-29", "Houston", 34, "2023-09-29" ) %>% mutate(across("ForecastDate", as.Date)) forecasts_scd <- forecasts_full %>% mutate(ForecastFrom = ForecastDate, ForecastUntil = case_when( City == "Houston" ~ as.Date(NA), ForecastDate == "2023-09-29" ~ as.Date(NA), TRUE ~ as.Date("2023-09-29") )) %>% filter(!(City == "Houston" & ForecastFrom == "2023-09-29")) %>% distinct() %>% select(!"ForecastDate") %>% arrange(ForecastFrom) forecasts_dated <- filter(forecasts_full, ForecastDate == "2023-09-28") forecasts <- select(forecasts_dated, !"ForecastDate") forecasts2 <- filter(forecasts_full, ForecastDate == "2023-09-29") %>% select(!"ForecastDate") forecasts2a <- filter(forecasts_full, ForecastDate == "2023-09-29") ## ----forecasts, eval = requireNamespace("tidyverse")-------------------------- # Current date: 2023-09-28 forecasts ## ----forecasts2a, eval = requireNamespace("tidyverse")------------------------ # Current date: 2023-09-29 forecasts2 ## ----forecasts_full, eval = requireNamespace("tidyverse")--------------------- forecasts_full ## ----forecasts_full_examples, eval = requireNamespace("tidyverse")------------ # Current forecasts forecasts_full %>% slice_max(ForecastDate, n = 1) %>% select(!"ForecastDate") # Forecasts for a given date forecasts_full %>% filter(ForecastDate == "2023-09-28") # Full history for a given city forecasts_full %>% filter(City == "New York") ## ----forecasts_scd, eval = requireNamespace("tidyverse")---------------------- forecasts_scd ## ----adresses_setup, include = FALSE, eval = requireNamespace("tidyverse")---- addresses <- tibble::tibble( ID = c(1, 2, 1, 1), GivenName = c("Alice", "Robert", "Alice", "Alice"), Surname = c("Doe", "Tables", "Doe", "Doe"), Address = c("Donut Plains 1", "Rainbow Road 8", "Donut Plains 1", "Rainbow Road 8"), MovedIn = c("1989-06-26", "1989-12-13", "1989-06-26", "2021-03-01"), MovedOut = c(NA, NA, "2021-03-01", NA), ValidFrom = c("1989-06-26", "1989-12-13", "2021-03-08", "2021-03-08"), ValidUntil = c("2021-03-08", NA, NA, NA) ) %>% mutate(across(c("MovedIn", "MovedOut", "ValidFrom", "ValidUntil"), as.Date)) name_change_date <- as.Date("2023-08-28") addresses2 <- addresses %>% filter(ID == 1) %>% { .data <- . .data %>% filter(Address == "Rainbow Road 8") %>% mutate(Surname = "Tables", ValidFrom = !!name_change_date) %>% bind_rows(.data) } %>% mutate( ValidUntil = as.Date( c(NA, !!name_change_date, NA, !!name_change_date), origin = "1970-01-01" ) ) %>% bind_rows(filter(addresses, ID == 2)) %>% arrange(ValidFrom) %>% distinct() ## ----addresses1, eval = requireNamespace("tidyverse")------------------------- addresses ## ----addresses1a, eval = requireNamespace("tidyverse")------------------------ slice_timestamp <- "2021-03-02" addresses %>% filter(ID == 1, ValidFrom < !!slice_timestamp, ValidUntil >= !!slice_timestamp | is.na(ValidUntil)) %>% select(!c("ValidFrom", "ValidUntil")) ## ----addresses2, eval = requireNamespace("tidyverse")------------------------- filter(addresses2, ID == 1, Address == "Rainbow Road 8") %>% select(ID, GivenName, Surname, MovedIn, MovedOut, ValidFrom, ValidUntil) ## ----addresses3, eval = requireNamespace("tidyverse")------------------------- slice_timestamp <- "2022-03-04" addresses2 %>% filter(Address == "Rainbow Road 8", is.na(MovedOut), ValidFrom < !!slice_timestamp, ValidUntil >= !!slice_timestamp | is.na(ValidUntil)) %>% select(ID, GivenName, Surname, MovedIn, MovedOut) slice_timestamp <- "2023-09-29" addresses2 %>% filter(Address == "Rainbow Road 8", is.na(MovedOut), ValidFrom < !!slice_timestamp, ValidUntil >= !!slice_timestamp | is.na(ValidUntil)) %>% select(ID, GivenName, Surname, MovedIn, MovedOut)