找出" max"列的列和相应行的另一列的值

时间:2018-04-06 11:50:42

标签: r

在庞大的数据框架中,我想找出多列的最大值。

使用这些值,我想找到并打印第一列包含这些值的行的不同列的值" max"值。

例如,使用mtcars built-in dataframe,我想找到列qsechpwt的最大值。然后,使用这些最大列值,找到并打印mpg列中包含最大qsechpwt值的行的值。

3 个答案:

答案 0 :(得分:2)

您可以使用dplyr来实现此目的。

library(dplyr)

mtcars_maxvals <- mtcars %>%
       select(mpg, qsec, hp, wt) %>%
       gather(col, val, -mpg) %>%
       group_by(col) %>%
       filter(val==max(val)) %>%
       ungroup()

我包含了select语句,因为你指定了这三列,但如果删除它,你将得到所有列的最大值和相应的mpg。此外,如果另一个变量的相应最大值有多个mpg值,您也会看到。

答案 1 :(得分:0)

您没有指定特定的所需输出。这似乎是你想做的事情。

library(tidyverse)
mtcars %>% 
  filter(qsec == max(qsec, na.rm = TRUE) | 
           hp == max(hp, na.rm = TRUE) | 
           wt == max(wt, na.rm = TRUE)) %>% 
  select(qsec, hp, wt, mpg)

你说你有一个巨大的数据帧。这是一个data.table版本,在我的机器上快了大约15倍,至少在非常小的mtcars数据集上。我不知道它是如何扩展的:

mtdt[qsec == max(qsec, na.rm = TRUE) |
   hp == max(hp, na.rm = TRUE) | 
   wt == max(wt, na.rm = TRUE), .(qsec, hp, wt, mpg)]

答案 2 :(得分:0)

 row.ind <- apply(mtcars[,c(4,6:7)], 2, function(x)order(x,decreasing=T)[1]) 
 mtcars$mpg[row.ind]    OR
 mtcars[row.ind,c(1,4,6:7)] ##for the subsetted dataframe

使用矢量化函数which.max()

的更快版本
row.ind <- apply(mtcars[,c(4,6:7)], 2, function(x)which.max(x))           
mtcars[row.ind,c(1,4,6:7)]