获取在给定列中具有最大值的其他列的值

时间:2017-11-05 10:21:45

标签: r max sapply argmax

我可以使用rows, disp, hp函数在mtcars数据集中找到sapply的最大值,分别为472 335:

sapply(list(mtcars$disp,mtcars$hp), max, na.rm=TRUE)

现在我希望cyl获取这些值,即找到cyl的最大值的汽车的sapply(list(mtcars$disp,mtcars$hp),max,na.rm=TRUE)

我应该使用哪种功能?我尝试使用which,rownames,colnames

失败了
mtcars(which(sapply(list(mtcars$disp,mtcars$hp),max,na.rm=TRUE)))
rownames(which(sapply(list(mtcars$disp,mtcars$hp),max,na.rm=TRUE))))
mtcars$cyl(sapply(list(mtcars$disp,mtcars$hp),max,na.rm=TRUE))

2 个答案:

答案 0 :(得分:1)

library(dplyr)
filter(mtcars, hp==max(hp) | disp == max(disp))$cyl

答案 1 :(得分:0)

data.table解决方案是:

require(data.table)
mtcars <- as.data.table(mtcars)

mtcars[hp==max(hp) | disp==max(disp)]
    mpg cyl disp  hp drat   wt  qsec vs am gear carb
1: 10.4   8  472 205 2.93 5.25 17.98  0  0    3    4
2: 15.0   8  301 335 3.54 3.57 14.60  0  1    5    8

#  if you want to get one column, e.g. 'cyl'
mtcars[hp==max(hp) | disp == max(disp), cyl]
[1] 8 8

# if you want to get several columns, do either of:
mtcars[hp==max(hp) | disp == max(disp), .(cyl,qsec)]
mtcars[hp==max(hp) | disp == max(disp), list(cyl,qsec)]
   cyl  qsec
1:   8 17.98
2:   8 14.60