R:按组和年份索引,同一组和年份的数字相似
R: Index by group and year with similar number for same group and year
我有一个数据框,显示 children 的出生日期 parent 和年份。我需要的是一个新列,该列按 child 的出生顺序编制索引,但如果来自同一 parent 的两个 children 出生在同一年,则提供相同的数字。数据如下:
>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
到目前为止,我为 parent 每年创建了一个 child 的索引,但是 children 即使他们出生在同一年,也会得到递增的数字。我使用了以下代码:
> 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
你有解决这个问题的方法吗?我的代码是否有轻微的调整来解决这个问题?提前致谢!
您可以将 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
我有一个数据框,显示 children 的出生日期 parent 和年份。我需要的是一个新列,该列按 child 的出生顺序编制索引,但如果来自同一 parent 的两个 children 出生在同一年,则提供相同的数字。数据如下:
>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
到目前为止,我为 parent 每年创建了一个 child 的索引,但是 children 即使他们出生在同一年,也会得到递增的数字。我使用了以下代码:
> 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
你有解决这个问题的方法吗?我的代码是否有轻微的调整来解决这个问题?提前致谢!
您可以将 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