2016-08-06 3 views
4

私は、子供が最初に生まれたかどうかのためのダミー変数を作成しようとしています。私のデータは、ID =子ID、MID =母ID、誕生とCYRB誕生=今年のCMOB =月でこのランク(R)を使用してネクタイを扱う

ID MID CMOB CYRB  
1 1  1  1991 
2 1  7  1989 
3 2  1  1985 
4 2  11  1985 
5 2  9  1994 
6 3  4  1992 
7 4  2  1992 
8 4  10  1983 

ようになります。

私はこれを使用してみました最初に生まれたダミーの場合:

Identifiers_age <- Identifiers_age %>% group_by(MPUBID) 
          %>% mutate(first = as.numeric(rank(CYRB) == 1)) 

しかし、(明らかに、この場合には目的の列がCMOBている別のcolumnnのランクによって絆を破壊する方法があるようには思えません)、私が "ties.method"引数を使用しようとするたびに、入力が文字ベクトルでなければならないことがわかります。

ここに何か不足していますか?

答えて

4

order?orderから、ここで使用する方が便利かもしれません:

注文は、さらに引数によって絆を壊し、 昇順または降順に最初の引数を再配置順列を返します。

Identifiers_age <- Identifiers_age %>% group_by(MID) %>% 
        mutate(first = as.numeric(order(CYRB, CMOB) == 1)) 
Identifiers_age 

#Source: local data frame [8 x 5] 
#Groups: MID [4] 

#  ID MID CMOB CYRB first 
# <int> <int> <int> <int> <dbl> 
#1  1  1  1 1991  0 
#2  2  1  7 1989  1 
#3  3  2  1 1985  1 
#4  4  2 11 1985  0 
#5  5  2  9 1994  0 
#6  6  3  4 1992  1 
#7  7  4  2 1992  0 
#8  8  4 10 1983  1 
+0

ああ、完璧です、ありがとう! – Milhouse

1

我々はまだrankを使用したい場合は、私たちは、「日付」にして「CYRB」、「CMOB」を変換し、それにrankを適用し、論理ベクトルに基づいて、バイナリ出力を得ることができます

Identifiers_age %>% 
     group_by(MID) %>% 
     mutate(first = as.integer(rank(as.Date(paste(CYRB, CMOB, 1, 
        sep="-"), "%Y-%m-%d"))==1)) 
#  ID MID CMOB CYRB first 
# <int> <int> <int> <int> <int> 
#1  1  1  1 1991  0 
#2  2  1  7 1989  1 
#3  3  2  1 1985  1 
#4  4  2 11 1985  0 
#5  5  2  9 1994  0 
#6  6  3  4 1992  1 
#7  7  4  2 1992  0 
#8  8  4 10 1983  1 

それともrank

Identifiers_age %>% 
     group_by(MID) %>% 
     mutate(first = as.integer(rank(CYRB + CMOB/12)==1)) 
#  ID MID CMOB CYRB first 
# <int> <int> <int> <int> <int> 
#1  1  1  1 1991  0 
#2  2  1  7 1989  1 
#3  3  2  1 1985  1 
#4  4  2 11 1985  0 
#5  5  2  9 1994  0 
#6  6  3  4 1992  1 
#7  7  4  2 1992  0 
#8  8  4 10 1983  1 
でこれを行うために算術演算を使用することができます3210
関連する問題