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

如何在R语言中按行获取选定列第二高值的位置索引

获取每行第二高值的列位置

首先,你的测试数据框:

ts <- structure(list(OP = c(1, 3, 5), x = c(0.405595375690609, 0.256223899079487, 
0.0131878938991576), y = c(0.792096293298528, 0.0120686823502183, 
0.518370501697063), z = c(0.400826650671661, 0.279657100560144, 
0.409006189322099)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-3L))

要实现获取每行x、y、z列中第二高值的列位置,可以通过对每行数值排序后提取对应索引的方式完成:

library(dplyr)

td <- ts %>% 
  rowwise() %>% 
  mutate(second_max = {
    cols <- c_across(c(2:4))
    # 按降序排序后取第二个元素的原列索引
    order(cols, decreasing = TRUE)[2]
  })

结果验证

运行上述代码后,得到的结果与你期望的完全一致:

OPxyzsecond_max
10.40559540.79209630.40082671
30.25622390.01206870.27965711
50.01318790.51837050.40900623

代码解释

  • rowwise() 确保数据按行独立处理
  • c_across(c(2:4)) 提取每行的x、y、z列数值
  • order(cols, decreasing = TRUE) 对每行数值按降序排序,返回的是原列的索引顺序
  • 取排序后索引的第2个元素,即为第二高值对应的原列位置(对应x=1、y=2、z=3的索引规则)

内容的提问来源于stack exchange,提问作者M.O

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:32:11