我有一个简单的数据框,由一系列 ID 的日期观察组成。
df<- data.frame(ID = c(1,1,1,1,2,2,2,2,3,3), Date = c(1981,1947,1981,1992,1999,2001,2000,2001,2017,2019))
ID Date
1 1 1981
2 1 1947
3 1 1981
4 1 1992
5 2 1999
6 2 2001
7 2 2000
8 2 2001
9 3 2017
10 3 2019
我只想根据观察日期为每个 ID 的观察编号。最早观察 = 1,然后是 2,依此类推
ID Date order
1 1 1981 2
2 1 1947 1
3 1 1981 2
4 1 1992 3
5 2 1999 1
6 2 2001 3
7 2 2000 2
8 2 2001 3
9 3 2017 1
10 3 2019 2
我确定以前有人问过并回答过这样的问题,但我一直找不到。如果您提供任何帮助或指导,我将不胜感激。
答案 0 :(得分:2)
df %>%
group_by(ID) %>%
mutate(order = dense_rank(Date)) %>%
ungroup()
## A tibble: 10 x 3
# ID Date order
# <dbl> <dbl> <int>
# 1 1 1981 2
# 2 1 1947 1
# 3 1 1981 2
# 4 1 1992 3
# 5 2 1999 1
# 6 2 2001 3
# 7 2 2000 2
# 8 2 2001 3
# 9 3 2017 1
#10 3 2019 2
答案 1 :(得分:1)
怎么样
> df %>% group_by(ID) %>% mutate(order=rank(Date, ties.method = "min")) %>% ungroup()
# A tibble: 10 x 3
ID Date order
<dbl> <dbl> <int>
1 1 1981 2
2 1 1947 1
3 1 1981 2
4 1 1992 4
5 2 1999 1
6 2 2001 3
7 2 2000 2
8 2 2001 3
9 3 2017 1
10 3 2019 2
答案 2 :(得分:1)
使用 data.table
library(data.table)
setDT(df)[, order := frank(Date, ties.method = 'dense'), ID]