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
相关产品推荐
相关产品推荐

