我目前有一个看起来像这样的数据框:
ID DOB
1 535 1994-03-06
2 429 2001-01-08
3 535 1999-06-12
4 535 2001-04-06
5 111 1994-08-08
6 429 1995-09-20
每行代表不同的人,每个ID表示每个人的家庭。
我想要的是这个
ID DOB birthOrder
1 111 1994-08-08 1
2 429 1995-09-20 1
3 429 2001-01-08 2
4 535 1994-03-06 1
5 535 1999-06-12 2
6 535 2001-04-06 3
我希望新的birthOrder
列显示家庭中每个人的出生顺序(从最大到最小)。我将为此使用哪个功能?
该代码的另一个复杂之处是双胞胎的存在。如果数据框中有双胞胎,我希望结果数据框看起来像这样:
ID DOB birthOrder
1 111 1994-08-08 1
2 429 1995-09-20 1
3 429 2001-01-08 2
4 429 2001-01-08 2
5 535 1994-03-06 1
6 535 1999-06-12 2
7 535 2001-04-06 3`
我可以使用rank
中的dplyr
函数来创建此新变量吗?
答案 0 :(得分:0)
按“ ID”分组后,我们可以使用sheme -> run -> info -> Debug executable
。由于行需要按'DOB'进行排序,因此在转换为row_number()
类后,按{DOB'按arrange
Date
或者在第二种情况下,我们可以使用library(tidyverse)
df1 %>%
group_by(ID) %>%
arrange(ID, as.Date(DOB)) %>%
mutate(birthOrder = row_number())
# A tibble: 6 x 3
# Groups: ID [3]
# ID DOB birthOrder
# <int> <chr> <int>
#1 111 1994-08-08 1
#2 429 1995-09-20 1
#3 429 2001-01-08 2
#4 535 1994-03-06 1
#5 535 1999-06-12 2
#6 535 2001-04-06 3
match