对我而言,我有一个非常复杂的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)
答案 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))