如何获取DataFrame中某列最大值对应的行名称?
解决方法
基础R实现
你已经通过which.max(df[,1])拿到了正确的位置索引,直接用这个索引提取行名即可:
rownames(df)[which.max(df[,1])]
错误原因分析
- 你的第一个代码
rownames(which.max(df[,1]))返回NULL:因为which.max()返回的是整数类型的位置编号,不是带有行名属性的对象,rownames()只能读取有行名属性的结构(比如数据框、矩阵),所以对整数调用会返回NULL。 - 第二个代码
rownames(df)[apply(df,1,which.ax)]问题有两个:- 拼写错误:
which.ax应该是which.max - 逻辑错误:
apply(df, 1, ...)是按行遍历数据框,返回的是每行中最大值所在的列索引,用这些列索引去取行名,自然会得到大量重复的行名,完全不符合你的需求。
- 拼写错误:
可选的tidyverse方式(如果你使用dplyr)
如果你习惯用tidyverse生态,也可以这样实现:
library(dplyr) df %>% slice_max(n = 1, order_by = !!sym(colnames(df)[1])) %>% rownames()
内容的提问来源于stack exchange,提问作者jumpsuitgallion
相关产品推荐
相关产品推荐

