如何根据特定条件更新分组数据的列的值?

时间:2019-04-13 08:18:18

标签: r

我正在尝试创建员工流失的预测模型。我为每位员工创建了多行以将其时间整合到数据集中。

要查看的列:

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

0 个答案:

没有答案