Мы можем преобразовать столбец даты в фактическую дату, arrange
данные по EmployeeID
и Start_date
, group_by
EmployeeID
и создать новый столбец, принимающий значение lead
из Start_date
.
library(dplyr)
df %>%
rename(Start_date = Effective_Date) %>%
mutate(Start_date = as.Date(Start_date, "%d/%m/%Y")) %>%
arrange(EmployeeID, Start_date) %>%
group_by(EmployeeID) %>%
mutate(End_date = lead(Start_date))
# EmployeeID Job_Title Start_date End_date
# <int> <fct> <date> <date>
#1 1 Sales1 2000-01-01 2010-02-05
#2 1 Sales2 2010-02-05 NA
#3 2 Sales1 2009-01-03 2011-01-06
#4 2 Management 2011-01-06 NA
данные
df <- structure(list(EmployeeID = c(1L, 2L, 1L, 2L), Job_Title = structure(c(2L,
2L, 3L, 1L), .Label = c("Management", "Sales1", "Sales2"), class = "factor"),
Effective_Date = structure(1:4, .Label = c("1/1/2000", "3/1/2009",
"5/2/2010", "6/1/2011"), class = "factor")), class = "data.frame",
row.names = c(NA, -4L))