根据观察日期按组对观察进行编号

时间:2021-02-12 20:06:12

标签: r

我有一个简单的数据框,由一系列 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

我确定以前有人问过并回答过这样的问题,但我一直找不到。如果您提供任何帮助或指导,我将不胜感激。

3 个答案:

答案 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]
相关问题