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

R语言data.table如何按ID分组创建年份降序排名变量

实现方法

不需要拆分嵌套列表,直接用data.table原生的分组按引用赋值语法即可,写法简洁且运行性能更高。

根据你给出的预期结果(组内最高年份排1,往前每相差1年排名加1,中间缺失的年份也计入排位),直接执行以下代码即可:

library(data.table)

# 构建示例数据
example <- data.table(year = c(2016, 2017, 2018, 2016, 2017, 2020), 
                      ID = c("A","A","A", "B", "B","B"))

# 按ID分组生成排名列
example[, yearRank := max(year) - year + 1, by = ID]

运行后得到的结果和你给出的预期完全一致:

year ID yearRank
1: 2016  A        3
2: 2017  A        2
3: 2018  A        1
4: 2016  B        5
5: 2017  B        4
6: 2020  B        1

如果你需要的是常规组内秩排名(即仅按组内现有数据的顺序排位,不考虑年份间隔,最高年份排1、次高排2,以此类推),可以用data.table内置的frank函数实现:

example[, yearRank := frank(-year, ties.method = "first"), by = ID]

该写法得到的B组排名为3、2、1,和你给出的预期结果有差异,可根据实际业务规则选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:57:32