我正在尝试创建员工流失的预测模型。我为每位员工创建了多行以将其时间整合到数据集中。
要查看的列:
HIRE_DATE TERMINATION_DATE EMP_STATUS NROW YEAR_RANGE
我的更新: 如果员工仍在公司中,则终止日期等于SysDate(2019年4月13日,即今天),否则该员工不再活跃。
每位员工的任期与他的任期一样多。例如,如果一名员工于2015年加入并于2018年辞职。那么该员工有4行。我希望EMP_STATUS在他任职的所有年份都保持为0,而在他离开时保持为1。 也就是说,如果员工已离开公司,即终止日期!=今天的日期,那么我希望该员工的最后一行更新为EMP_STATUS = 1,否则保持不变。
在示例数据集中,EMP_STATUS
将更改为nrow=1
的第三行
提取年度扩展数据的最后一行
hris_last_active_year <- hris_yearlyData %>%
group_by(nrow) %>%
slice(which.max(year_range))
以上给出了我的最后一行。如果终止日期不等于当前日期,我可以应用条件将emp_status
更新为1。我想到了在不同的数据集中获取前几行,并对这两个数据集进行并集。我尝试了以下代码,但这没有给我正确的结果。
hris_before_last_active_year <- hris_yearlyData %>% group_by(nrow) %>%
filter(year_range<which.max(year_range))
有人可以帮助我找到正确的解决方案吗?
此外,我想说明一下实际数据集有300万行。
考虑今天的日期是2019年4月13日
初始数据集
nrow HIRE_DATE TERMINATION_DATE EMP_STATUS
1 01-05-2016 03-06-2018 0
2 01-05-2015 NA 0
转换后的数据集(我的问题数据集)
nrow HIRE_DATE TERMINATION_DATE EMP_STATUS year_range
1 01-05-2016 03-06-2018 0 01-05-2016
1 01-05-2016 03-06-2018 0 01-05-2017
1 01-05-2016 03-06-2018 0 01-05-2018
2 01-05-2015 04-13-2019 0 01-05-2015
2 01-05-2015 04-13-2019 0 01-05-2016
2 01-05-2015 04-13-2019 0 01-05-2017
2 01-05-2015 04-13-2019 0 01-05-2018
2 01-05-2015 04-13-2019 0 01-05-2019
预期数据集
nrow HIRE_DATE TERMINATION_DATE EMP_STATUS year_range
1 01-05-2016 03-06-2018 0 01-05-2016
1 01-05-2016 03-06-2018 0 01-05-2017
1 01-05-2016 03-06-2018 1 01-05-2018
2 01-05-2015 04-13-2019 0 01-05-2015
2 01-05-2015 04-13-2019 0 01-05-2016
2 01-05-2015 04-13-2019 0 01-05-2017
2 01-05-2015 04-13-2019 0 01-05-2018
2 01-05-2015 04-13-2019 0 01-05-2019