我有一个数据框,显示父母和年份的孩子的出生。我需要的是一个新的列,用于索引每个孩子的出生顺序,但如果来自同一父母的两个孩子在同一年出生,则提供相同的数字。数据如下:
\s[0-9]
到目前为止,我为每个父母每年创建一个儿童指数,但即使他们出生在同一年,孩子也会得到递增数字。我使用了以下代码:
>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
然而,我想要达到的是(请注意1993年父亲3的双重" 1")
> 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
你有解决这个问题的方法吗?我的代码是否有轻微的调整解决了这个问题?提前谢谢!
答案 0 :(得分:1)
您可以dense_rank
使用row_number
:
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