如何在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] })
结果验证
运行上述代码后,得到的结果与你期望的完全一致:
| OP | x | y | z | second_max |
|---|---|---|---|---|
| 1 | 0.4055954 | 0.7920963 | 0.4008267 | 1 |
| 3 | 0.2562239 | 0.0120687 | 0.2796571 | 1 |
| 5 | 0.0131879 | 0.5183705 | 0.4090062 | 3 |
代码解释
rowwise()确保数据按行独立处理c_across(c(2:4))提取每行的x、y、z列数值order(cols, decreasing = TRUE)对每行数值按降序排序,返回的是原列的索引顺序- 取排序后索引的第2个元素,即为第二高值对应的原列位置(对应x=1、y=2、z=3的索引规则)
内容的提问来源于stack exchange,提问作者M.O
相关产品推荐
相关产品推荐

