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

R语言中如何基于另一列的值对指定列进行排名排序

data.table 对val列降序生成排名方法

需求规则

  • 基于现有data.table数据集生成排名
  • 排名序号1对应val列最大值,后续序号依次匹配次大值
  • 示例数据中排名1对应的val值为181.2349

测试数据集加载

直接运行以下代码即可加载示例数据:

data = structure(list(quant = c(0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.12, 
0.14, 0.16, 0.18, 0.2, 0.22, 0.24, 0.26, 0.28, 0.3, 0.32, 0.34, 
0.36, 0.38, 0.4, 0.42, 0.44, 0.46, 0.48, 0.5, 0.52, 0.54, 0.56, 
0.58, 0.6, 0.62, 0.64, 0.66, 0.68, 0.7, 0.72, 0.74, 0.76, 0.78, 
0.8, 0.82, 0.84, 0.86, 0.88, 0.9, 0.92, 0.94, 0.96, 0.98, 1), 
    val = c(47.91623, 90.3489408, 127.16448, 70.526045, 66.3226236, 
    85.103976, 139.317196, 127.446425999999, 91.5951164, 86.805257, 
    111.71706, 79.3636359999997, 73.1136444, 147.4201476, 65.2126171999996, 
    135.85975, 127.401408, 106.597378999999, 101.1695592, 94.1209831999999, 
    93.1355219999998, 96.3409336000001, 90.2044183999998, 75.7257826, 
    147.727516, 80.45166, 102.691942399999, 77.5738932, 62.665275199999, 
    128.7217, 156.20672, 132.990364, 118.481792, 118.512295599999, 
    57.3580020000001, 110.16883, 145.284928, 155.691106799999, 
    134.824147999999, 161.223344, 98.6174559999996, 99.0563548, 
    131.044792000001, 124.3800214, 99.4231451999992, 154.733724999998, 
    120.806394399999, 86.9254320000016, 139.611945600001, 181.234905600001, 
    119.7396)), row.names = c(NA, -51L), class = c("data.table", 
"data.frame"))

核心实现

优先用data.table内置的frank()函数,性能远高于基础包的rank(),对-val做升序排名就等价于对原val列做降序排名,刚好满足1对应最大值的要求:

# 未安装data.table先运行:install.packages("data.table")
library(data.table)

# 新增排名列rank_val
data[, rank_val := frank(-val)]

如果存在val值重复的场景,可通过ties.method参数调整并列排名规则:

  • ties.method = "first":重复值按行出现顺序分配不同排名,无并列序号
  • ties.method = "min":重复值取相同的最小排名,后续排名跳号,比如两个并列第1,下一个值排名为3
  • ties.method = "dense":重复值取相同排名,后续排名不跳号,比如两个并列第1,下一个值排名为2

结果校验

运行以下代码按排名升序查看前5行,可确认val=181.2349的记录排名为1,符合规则:

data[order(rank_val), head(.SD, 5)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:54:23