我有一个简单的数据框,其中包含一系列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我相信这样的问题以前已经有人问过,也有人回答过,但我一直没能找到。如果有任何帮助或指导,我将不胜感激。
发布于 2021-02-13 04:15:42
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发布于 2021-02-13 04:17:20
关于
> 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发布于 2021-02-13 06:38:28
使用data.table
library(data.table)
setDT(df)[, order := frank(Date, ties.method = 'dense'), ID]https://stackoverflow.com/questions/66178398
复制相似问题