如何在 R 中对订单日期进行排名

How to rank order dates in R

我有多个产品和不同日期范围的数据框。我想为每个日期分配唯一值,这样即使不同产品的开始日期不同,我也可以按日期分组。

df

acc product date
a1  p1      d1
a1  p1      d2
a1  p1      d3
a1  p1      d4
a1  p2      d1
a1  p2      d2
a1  p2      d3
a1  p3      d3
a1  p3      d4

我想安排日期,以便 d1、d2、d3 等每个都有一个唯一标识符

我使用以下代码来尝试:

df <- df %>% group_by(acc, product) %>% mutate(t = row_number())

Output

df

acc product date  t   EXPECTED
a1  p1      d1    1   1
a1  p1      d2    2   2
a1  p1      d3    3   3
a1  p1      d4    4   4
a1  p2      d1    1   1
a1  p2      d2    2   2
a1  p2      d3    3   3
a1  p3      d3    1   3
a1  p3      d4    2   4

对此有什么建议吗?

使用dplyr::dense_rank()

df %>% mutate(new = dense_rank(date))
  acc product date new
1  a1      p1   d1   1
2  a1      p1   d2   2
3  a1      p1   d3   3
4  a1      p1   d4   4
5  a1      p2   d1   1
6  a1      p2   d2   2
7  a1      p2   d3   3
8  a1      p3   d3   3
9  a1      p3   d4   4

但是,如果您想为每个 acc 重新开始排名,请在 mutate 语句之前使用 group_by

dput 使用

df <- structure(list(acc = c("a1", "a1", "a1", "a1", "a1", "a1", "a1", 
"a1", "a1"), product = c("p1", "p1", "p1", "p1", "p2", "p2", 
"p2", "p3", "p3"), date = c("d1", "d2", "d3", "d4", "d1", "d2", 
"d3", "d3", "d4")), class = "data.frame", row.names = c(NA, -9L
))