R:按组和年份分类,同一组和年份的数字相似

时间:2017-09-14 00:51:41

标签: indexing dplyr counter identifier

我有一个数据框,显示父母和年份的孩子的出生。我需要的是一个新的列,用于索引每个孩子的出生顺序,但如果来自同一父母的两个孩子在同一年出生,则提供相同的数字。数据如下:

\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

你有解决这个问题的方法吗?我的代码是否有轻微的调整解决了这个问题?提前谢谢!

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