我有一列日期值。我试图将最近的日期标记为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)
先谢谢你
解决方案:
另一种方法是使用 xxx_rank
在dplyr或 rank
在基础R中。
df %>%
mutate(day_no = dense_rank(desc(date)))
选择一个适合你的数据集的就可以了。