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

如何按a列优先于b列的规则找出数据框中对应最小值的行号?

按多列优先级查找数据框最小值对应的行号

针对你的需求,这里提供几种R语言的实现方法,都能得到期望的第5行结果:

方法一:基础R分步处理

通过分步筛选锁定目标行,逻辑清晰易懂:

# 定义样本数据
dat = data.frame('a' = c(4,5,6,8,2,2, 5), 'b' = c(23, 45, 12, 11, 1, 3, 4))

# 1. 获取a列的最小值
min_a <- min(dat$a)
# 2. 筛选出a列等于最小值的所有行
subset_a <- dat[dat$a == min_a, ]
# 3. 在筛选出的子集中找到b列最小的行,提取原数据框的行号并转成数值
result_row <- as.numeric(rownames(subset_a)[which.min(subset_a$b)])

# 输出结果
print(result_row) # 输出:5

方法二:基础R排序取首行

利用order()函数直接按优先级排序,取排序后的第一行行号:

dat = data.frame('a' = c(4,5,6,8,2,2, 5), 'b' = c(23, 45, 12, 11, 1, 3, 4))

# 按a列升序、b列升序排序,取第一行的原行号
result_row <- as.numeric(rownames(dat[order(dat$a, dat$b), ])[1])

print(result_row) # 输出:5

方法三:dplyr包实现(tidyverse风格)

如果习惯使用tidyverse工具链,可以用dplyr的链式操作:

library(dplyr)

dat = data.frame('a' = c(4,5,6,8,2,2, 5), 'b' = c(23, 45, 12, 11, 1, 3, 4))

result_row <- dat %>%
  arrange(a, b) %>%  # 按a、b列升序排列
  slice(1) %>%       # 取排序后的第一行
  rownames() %>%     # 提取原行号
  as.numeric()       # 转成数值类型

print(result_row) # 输出:5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:33:16