I would like to make one more addition to the code below. Note that the All dataset does not include only 05/07 and 06/07. However, I would like to add somehow to the All dataset. In this case both coef and Result would have the same value, which is the coef value, so the final output table would look like this:
date2 Category coef Result
<date> <chr> <dbl> <dbl>
1 2021-06-30 FDE 4 0
2 2021-06-30 ABC 1 -1
3 2021-07-04 FDE 6 3
4 2021-07-05 ABC 3 3
5 2021-07-06 ABC 6 6
Executable code below:
library(dplyr)
library(tidyverse)
library(lubridate)
df1 <- structure(list(date1 = c("2021-06-28", "2021-06-28", "2021-06-28", "2021-06-28","2021-06-28"),
date2 = c("2021-06-30", "2021-06-30", "2021-07-04", "2021-07-05","2021-07-06"),
Category = c("FDE", "ABC", "FDE", "ABC","ABC"),
Week = c("Wednesday", "Wednesday", "Friday", "Sunday","Thursday"),
DR1 = c(4, 1, 6, 3,3), DR01 = c(4, 1, 4, 3,2), DR02 = c(4, 2, 6, 2,2),
DR03 = c(9, 5, 4, 7,3), DR04 = c(5, 4, 3, 2,3), DR05 = c(5, 4, 5, 4,3),
DR06 = c(2, 4, 3, 2,2)), class = "data.frame", row.names = c(NA, -5L))
df2 <- structure(list(date2 = c("2021-06-30", "2021-06-30", "2021-07-04", "2021-07-05","2021-07-06"),
Category = c("FDE", "ABC", "FDE", "ABC","ABC"), coef = c(4, 1, 6, 3,6)),
class = "data.frame", row.names = c(NA, -5L))
v1<- df1 %>%
select(starts_with("DR0")) %>% names %>%
paste0("coef-",.)
All<-left_join(df2, df1, by = c("date2", "Category")) %>%
mutate(across(starts_with("DR0"), ~ coef - .)) %>%
select(-Week, -DR1) %>%
rename_at(-c(1:4), ~v1)%>%
relocate(date1)
All<-All %>%
mutate(across(date1:date2, as.Date)) %>%
pivot_longer(starts_with('coef-'), values_to = 'Result') %>%
filter(date2 - date1 == as.numeric(str_sub(name, -2))) %>%
select(-date1,-name)
> All
# A tibble: 3 x 4
date2 Category coef Result
<date> <chr> <dbl> <dbl>
1 2021-06-30 FDE 4 0
2 2021-06-30 ABC 1 -1
3 2021-07-04 FDE 6 3