You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R数据框中按唯一日期生成分组排名

在R中实现相同日期统一排名的方法

这个需求其实很典型——给相同日期分配连续且一致的排名,不同日期按出现顺序递增。我给你分享几种实用的实现方式:

方法一:使用dplyr(tidyverse生态,推荐)

如果你平时用tidyverse做数据分析,这个方法代码清晰易读:

首先构造示例数据:

# 创建你的示例数据框
df <- data.frame(
  ID = 1:7,
  Date = c("01-01-2018", "02-01-2018", rep("03-01-2018", 3), rep("04-01-2018", 2))
)

然后用dense_rank()函数直接生成排名:

library(dplyr)

df <- df %>%
  mutate(Rank = dense_rank(Date))

解释

dense_rank()是专门处理这类“相同值同排名、排名连续不跳号”的函数,它会自动识别相同的Date值,给它们分配同一个排名,同时按日期的出现/排序顺序递增,完美匹配你的需求。

方法二:Base R实现(无需额外安装包)

如果你不想加载第三方包,用base R也能轻松实现,有两种简洁写法:

写法1:利用因子的水平序号

# 给Date列按出现顺序生成排名
df$Rank <- as.integer(factor(df$Date, levels = unique(df$Date)))

写法2:使用match()函数

# 更简洁的base R写法
df$Rank <- match(df$Date, unique(df$Date))

解释

两种写法的核心逻辑一致:unique(df$Date)会保留日期在数据框中首次出现的顺序,match()或因子的as.integer()会返回每个日期在这个唯一序列中的位置,自然实现相同日期同排名、不同日期递增的效果。

最终结果

运行任意一种方法后,你都会得到期望的数据框:

> df
  ID       Date Rank
1  1 01-01-2018    1
2  2 02-01-2018    2
3  3 03-01-2018    3
4  4 03-01-2018    3
5  5 03-01-2018    3
6  6 04-01-2018    4
7  7 04-01-2018    4

内容的提问来源于stack exchange,提问作者Neil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:19:08