2017-09-14 19 views
0

親と年の子供の出生を示すデータフレームがあります。私が必要とするのは、児童1人当たりの出産順位を示す新しいコラムですが、同じ年の2人の子供が同じ年に生まれた場合は同じ数字を提供します。データは以下のように見える: R:同じグループと年の同じグループ番号と年番号別

>df1 
id  year name 
parent1 2001 bas 
parent1 2002 jack 
parent2 1991 david 
parent3 1993 daniel 
parent3 1993 jasper 
parent3 1994 melany 
parent4 1997 john 
parent4 1999 gerard 

はこれまで、私は親あたりの年間の子供のためのインデックスを作成したが、子どもたちは、それらが同じ年に生まれている場合でも、昇順の番号を取得します。

> df2 <- df1 %>% group_by(id) %>% mutate(order = row_number(year)) 
> df2 
id  year name order 
parent1 2001 bas 1 
parent1 2002 jack 2 
parent2 1991 david 1 
parent3 1993 daniel 1 
parent3 1993 jasper 2 
parent3 1994 melany 3 
parent4 1997 john 4 
parent4 1999 gerard 1 

私が到着したいどのような、しかし、(年1993年parent3のために二重の「1」を注意してください)です:

id  year name order 
parent1 2001 bas 1 
parent1 2002 jack 2 
parent2 1991 david 1 
parent3 1993 daniel 1 
parent3 1993 jasper 1 
parent3 1994 melany 2 
parent4 1997 john 3 
parent4 1999 gerard 1 

は、あなたがのためのソリューションを持っていますか私は、次のコードを使用しましたこの問題?これを解決するコードを少し微調整していますか?前もって感謝します!

答えて

1

あなたはrow_numberためdense_rankを使用することができます。

df %>% group_by(id) %>% mutate(order = dense_rank(year)) 

# A tibble: 8 x 4 
# Groups: id [4] 
#  id year name order 
# <fctr> <int> <fctr> <int> 
#1 parent1 2001 bas  1 
#2 parent1 2002 jack  2 
#3 parent2 1991 david  1 
#4 parent3 1993 daniel  1 
#5 parent3 1993 jasper  1 
#6 parent3 1994 melany  2 
#7 parent4 1997 john  1 
#8 parent4 1999 gerard  2 
+1

おかげで、これは私のDFのために完璧に動作します! –

関連する問題