2017-06-22 15 views
0

私は、従業員が現在雇用されているかどうかを判断するために、一連のデータを実行する非常に複雑なRループのように見えます(私はデータアナリストです現在データアナリストとデータサイエンティストとして働いています)。もっと複雑にするために、私は彼らが特定のジョブコードで呼ばれているかどうかを知りたいと思います。私は1)必要なものと2)驚くべきものを概説します。Rダミーコードフィールドを作成するループ

サンプルデータ:

1 = EMPLIDの最新期間:

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" です。最も最近のJob.Entry.Date(すなわち、EMPLIDがTERMED)の後の日付

0 = EMPLIDの最新のJob.Entry.Dateは、最新のTerm.Dateの後にある(つまり、EMPLIDがTERMEDではない)。

いくつかのEMPLIDに複数のTerm.DatesとMultiple Job.Entry.Datesがあり、それらが常に同じ行にあるとは限らないため、複雑です。

2)1と同じこと私は、次の生成に「TermCode」をしたい除い:

1 = EMPLIDの最新Term.Dateは、最新のJob.Entry.Dateた後であり、1でありますジョブコードの%c( "101545"、 "101318"、 "100897"、 "100895"、 "100891"、 "100885"、 "100884"、 "100880"、 "100879"、 "100875" "、" 100873 "))(つまり、これらのジョブコードの1つとしてEMPLID TERMED)

0 = EMPLIDの最新のJob.Entry.Dateは、最新のTerm.Dateの後にあります(つまり、EMPLIDはTERMED )

2は= EMPLIDの最新Term.Dateは、最新のJob.Entry.Date後にされ、他のジョブコードである(すなわち、上記11 JobCodesの外と呼ばれるEMPLID)

答えて

1

ハード正確に何を伝えるためにあなたは尋ねていますが、おそらくこれが役立ちます。私は、以下のコードはあなたに最初のステップを与えると思うし、このロジックを2番目のステップに使うことができます。

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)) 
+0

これは私を魅了します。%>%の良い説明は何ですか?とにかく、そのEMPLIDの最大数が何であれ、EMPLIDごとに1行を作成するようにしていますか? –

+0

ここには良い説明があります:http://r4ds.had.co.nz/pipes.html。 1つの行を生成するには、 "summarize"の "mutate"を切り替えます。 – roarkz

+0

すごく読んでくれてありがとう@ザック!私が "mutate"を "summarize"に置き換えたとき、 "1つの値を期待する"というエラーが出ました。私は以下を使用しようとしましたが、役に立たなかった:jobentrydat_termcodes <-jobentrydat_alltechs%>% group_by(EMPLID)%>% 集計(entry_date_max = max(Job.Entry.Date)、 TermCode = unique(ifelse(!is.na (Term.Date)&Term.Date> entry_date_max、1、0))) –

関連する問題