R语言使用which.max取行最大值时如何获取最后出现的对应列名
R逐行提取最大值对应最后一列名的解决方案
问题原因
which.max()函数默认仅返回第一个最大值对应的索引,因此无法匹配取最后一次出现最大值列名的需求。
解决方案1:自定义函数(无额外包依赖)
直接逐行计算最大值,提取所有等于最大值的位置后取最后一个:
# 自定义取最后一个最大值索引的函数 which.max.last <- function(x) { max_val <- max(x) # 若需过滤缺失值,替换为 max_val <- max(x, na.rm = TRUE) tail(which(x == max_val), 1) } # 逐行计算得到结果 nams <- names(test)[apply(test, 1, which.max.last)]
解决方案2:反转列序简化实现
通过反转列的顺序,用原生which.max()取反转后的第一个最大值,再映射回原列名:
nams <- names(test)[ncol(test) - apply(test[, ncol(test):1], 1, which.max) + 1]
输出验证
两种方法运行后得到的nams结果如下,与预期完全一致:
[1] "M.trust" "I.trust" "I.trust" "M.trust" "M.trust" "H.trust"
内容的提问来源于stack exchange,提问作者Sandy
相关产品推荐
相关产品推荐

