I have a dataframe:
df <- structure(list(User.Employee.ID = c(40000583L, 40000494L, 40000273L,
40000273L, 40001226L, 40000688L, 40000583L, 40000688L, 40001226L,
40001226L, 40001226L, 3002211L, 40001115L, 40000494L, 40001226L,
3002211L, 3002211L, 40000688L, 40000688L, 40001115L, 40001115L,
40000494L, 40000494L, 40000583L, 40000273L, 40000273L), Event.Date = c("4/1/2020",
"6/30/2020", "1/1/2021", "1/1/2021", "4/1/2021", "10/1/2021",
"11/1/2021", "9/1/2020", "1/1/2021", "1/1/2021", "1/1/2021",
"4/1/2021", "10/1/2020", "10/1/2021", "1/1/2020", "1/1/2020",
"5/1/2020", "9/1/2020", "1/1/2020", "1/1/2020", "10/1/2020",
"1/1/2020", "5/5/2020", "1/1/2020", "1/1/2020", "4/1/2020"),
End.Date = c("10/31/2021", "9/30/2021", "1/1/2021", "12/31/9999",
"12/31/9999", "12/31/9999", "12/31/9999", "9/30/2021", "1/1/2021",
"1/1/2021", "3/31/2021", "12/31/9999", "12/31/9999", "12/31/9999",
"12/31/2020", "4/30/2020", "5/31/2020", "9/1/2020", "8/31/2020",
"9/30/2020", "10/1/2020", "5/4/2020", "6/29/2020", "3/31/2020",
"3/31/2020", "12/31/2020"), Event = c("Promotion", "Return to Work",
"Data Change", "Data Change", "Promotion", "Promotion", "Rehire",
"Data Change", "Data Change", "Data Change", "Data Change",
"Promotion", "Data Change", "Promotion", "Data Change", "Data Change",
"Data Change", "Rehire", "Data Change", "Data Change", "Promotion",
"Data Change", "Suspension", "Data Change", "Data Change",
"Promotion"), Title = c("Project Leader", "Project Leader",
"Business Analyst GSI_niv. 2", "Business Analyst GSI_niv. 2",
"Senior Buyer-Niv.3", "Professional Account Manager (KAM)-Niv.2",
"Contract Manager", "Junior Account Manager (KAM)-Niv.1",
"Buyer-Niv.2", "Buyer-Niv.2", "Buyer-Niv.2", "Head of Group Electrical Equipment",
"Senior Expert Engineering_Niv. 3", "Senior Project Leader",
"Buyer-Niv.2", "Professional Account Manager (KAM)-Niv.2",
"Professional Account Manager (KAM)-Niv.2", "Junior Account Manager (KAM)-Niv.1",
"Manager Back Office", "Expert Engineering_Niv. 2", "Senior Expert Engineering_Niv. 3",
"Project Leader", "Project Leader", "Junior Project Leader",
"Data expert ALC", "Data expert ALC")), row.names = c(NA,
-26L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), groups = structure(list(
User.Employee.ID = c(3002211L, 40000273L, 40000494L, 40000583L,
40000688L, 40001115L, 40001226L), .rows = structure(list(
c(12L, 16L, 17L), c(3L, 4L, 25L, 26L), c(2L, 14L, 22L,
23L), c(1L, 7L, 24L), c(6L, 8L, 18L, 19L), c(13L, 20L,
21L), c(5L, 9L, 10L, 11L, 15L)), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, -7L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE))
User.Employee.ID Event.Date End.Date Event Title
<int> <date> <date> <chr> <chr>
1 40000494 2020-06-30 2020-09-30 Return to Work Project Leader
2 40001226 2020-04-01 1999-12-31 Promotion Senior Buyer-Ni~
3 40001226 2020-01-01 2020-01-01 Data Change Buyer-Niv.2
4 40001226 2020-01-01 2020-01-01 Data Change Buyer-Niv.2
5 40001226 2020-01-01 2020-03-31 Data Change Buyer-Niv.2
6 40001115 2020-10-01 1999-12-31 Data Change Senior Expert E~
7 40000494 2020-10-01 1999-12-31 Promotion Senior Project ~
8 40001226 2020-01-01 2020-12-31 Data Change Buyer-Niv.2
9 40001115 2020-01-01 2020-09-30 Data Change Expert Engineer~
10 40001115 2020-10-01 2020-10-01 Promotion Senior Expert E~
11 40000494 2020-01-01 2020-05-04 Data Change Project Leader
12 40000494 2020-05-05 2020-06-29 Suspension Project Leader
.....
In this dataframe, there are examples of three users who have been promoted in their organization. I would like to copy by user the old job value from Title column in the same row with Promotion value in Event column. On the example of the user 40001115: I need to take the Event.Date value of Promotion row which is 2020-10-01 and find for that user the previous month in End.Date which is 2020-09-30. Then copy the Title (Expert Engineering_Niv. 2) of that previous month to the Promotion row, so it would look like:
desiredresult <- data.frame(User.Employee.ID = c("40000494","40000494","40000494","40000494", "40001115", "40001115", "40001115", "40001226", "40001226", "40001226", "40001226", "40001226"),
Event.Date = c("2020-06-30","2020-10-01","2020-01-01","2020-05-05", "2020-10-01", "2020-01-01", "2020-10-01", "2020-04-01", "2020-01-01", "2020-01-01", "2020-01-01", "2020-01-01"),
End.Date = c("2020-09-30", "1999-12-31", "2020-05-04", "2020-06-29", "1999-12-31", "2020-09-30", "2020-10-01", "1999-12-31", "2020-01-01", "2020-01-01", "2020-03-31", "2020-12-31"),
Event = c("Return to Work", "Promotion", "Data Change", "Suspension", "Data Change", "Data Change", "Promotion", "Promotion", "Data Change", "Data Change", "Data Change", "Data Change"),
Title = c("Project Leader", "Senior Project Leader", "Project Leader", "Project Leader", "Senior Expert Engineering_Niv. 3", "Expert Engineering_Niv. 2", "Senior Expert Engineering_Niv. 3", "Senior Buyer-Niv.3", "Buyer-Niv.2", "Buyer-Niv.2", "Buyer-Niv.2", "Buyer-Niv.2"),
Old_Title = c(NA, "Project Leader", NA, NA, NA, NA, "Expert Engineering_Niv. 2", "Buyer-Niv.2", NA, NA, NA, NA))
User.Employee.ID Event.Date End.Date Event Title Old_Title
1 40000494 2020-06-30 2020-09-30 Return to Work Project Leader <NA>
2 40000494 2020-10-01 1999-12-31 Promotion Senior Project Leader Project Leader
3 40000494 2020-01-01 2020-05-04 Data Change Project Leader <NA>
4 40000494 2020-05-05 2020-06-29 Suspension Project Leader <NA>
5 40001115 2020-10-01 1999-12-31 Data Change Senior Expert Engineering_Niv. 3 <NA>
6 40001115 2020-01-01 2020-09-30 Data Change Expert Engineering_Niv. 2 <NA>
7 40001115 2020-10-01 2020-10-01 Promotion Senior Expert Engineering_Niv. 3 Expert Engineering_Niv. 2
8 40001226 2020-04-01 1999-12-31 Promotion Senior Buyer-Niv.3 Buyer-Niv.2
9 40001226 2020-01-01 2020-01-01 Data Change Buyer-Niv.2 <NA>
10 40001226 2020-01-01 2020-01-01 Data Change Buyer-Niv.2 <NA>
11 40001226 2020-01-01 2020-03-31 Data Change Buyer-Niv.2 <NA>
12 40001226 2020-01-01 2020-12-31 Data Change Buyer-Niv.2 <NA>
I have tried something using the lubridate package but it does not give me the desired output:
library(lubridate)
df %>%
group_by(User.Employee.ID) %>%
mutate(applied = +(row_number() %in%
findInterval(lubridate::mdy(first(Event.Date)),
lubridate::mdy(End.Date))))
Any help or suggestions would be appreciated!