R循环创建虚拟编码字段

时间:2017-06-22 21:08:00

标签: r

对我而言,我有一个非常复杂的R循环来执行一组数据,以确定员工当前是否被称为或雇用(我是一名现在担任数据分析师的数据分析师)和数据科学家)。为了使它更复杂,我想知道他们是否在某个特定的工作代码中被称为。我将概述1)我需要什么,2)什么是惊人的。

示例数据:

    EMPLID Jobcode Job.Entry.Date  Term.Date
1   147935  100880     2016-09-04       <NA>
2   147935  100884     2015-07-27       <NA>
3   147935  100887     2013-07-28       <NA>
4   147935  100887     2013-07-28 2015-03-23
5   147935  100889     2012-12-18       <NA>
6  1510844  100890     2013-06-30       <NA>
7  1510844  100890     2013-07-21       <NA>
8  1510844  100890     2016-07-10       <NA>
9  1510844  100895     2006-01-04       <NA>
10 1510844  100895     2016-04-10       <NA>
11 1510844  100895     2016-09-04       <NA>

1)我想创建一个新字段,让我们调用“TermCode”,其中满足以下条件:

  

1 = EMPLID最近的Term.Date是在最近的Job.Entry.Date之后(即,EMPLID被TERMED)

     

0 = EMPLID最近的Job.Entry.Date位于最近的Term.Date之后(即EMPLID未被定期)。

这很复杂,因为有些EMPLID有多个Term.Dates和Multiple Job.Entry.Dates,它们并不总是在同一行。

2)除了我想要“TermCode”生成以下内容之外,与1相同:

  

1 = EMPLID的最新Term.Date位于最近的Job.Entry.Date之后,并且是以下作业代码之一(%c中的作业代码%(“101545”,“101318”,“100897”,“ 100895“,”100891“,”100885“,”100884“,”100880“,”100879“,”100875“,”100873“))(即,作为其中一个JobCodes的EMPLID被认定)

     

0 = EMPLID最近的Job.Entry.Date是在最近的Term.Date之后(即EMPLID未被定期)

     

2 = EMPLID的最新Term.Date位于最近的Job.Entry.Date之后,并且是任何其他工作代码(即上述11个JobCodes之外的EMPLID TERMED)

1 个答案:

答案 0 :(得分:1)

很难确切地说出你在问什么,但也许这会有所帮助。我认为下面的代码将为您提供第一步,您可以将此逻辑用于第二步。

library(dplyr)
df %>% 
  group_by(EMPLID) %>% 
  mutate(entry_date_max = max(Job.Entry.Date),
     TermCode = ifelse(!is.na(Term.Date) & Term.Date > entry_date_max, 1, 0))