首页 > 解决方案 > 为R中的每个唯一日期分配数字

问题描述

我有一列包含日期值。我试图将最近的日期标记为 1,将最近的日期标记为 2,依此类推。
在这里我dplyr用来实现这一点,但在执行代码后,我得到恒定的结果为“1”

date = c("2020-01-20","2020-01-21","2020-01-22","2020-01-23","2020-01-24")
df = as.data.frame(date)
df$date= as.Date(df$date)

max_date=max(df$date)
min_date =min(df$date)

ll <- seq(min_date, max_date, by = "day")

df$day_no = case_when(
  ( max(df$date) ==as.Date(ll[5])) ~ as.integer(1),
  ( max(df$date)-1 ==as.Date(ll[4])) ~ as.integer(2),
  ( max(df$date)-2 ==as.Date(ll[3])) ~ as.integer(3),
  ( max(df$date)-3 ==as.Date(ll[2])) ~ as.integer(4),
  ( max(df$date)-4 ==as.Date(ll[1])) ~ as.integer(5),
  TRUE ~ as.integer(NA)
  ) 

我正在寻找的输出如下:

day_no = c(5,4,3,2,1)
day_no = as.integer(day_no)
df = data.frame(date,day_no)

提前致谢。

标签: r

解决方案


另一种方法是xxx_rank在 dplyr 或rankbase r 中使用。

df %>% 
  mutate(day_no = dense_rank(desc(date)))

只需为您的数据集选择一个即可。


推荐阅读