在庞大的数据框架中,我想找出多列的最大值。
使用这些值,我想找到并打印第一列包含这些值的行的不同列的值" max"值。
例如,使用mtcars
built-in dataframe,我想找到列qsec
,hp
和wt
的最大值。然后,使用这些最大列值,找到并打印mpg
列中包含最大qsec
,hp
和wt
值的行的值。
答案 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
row.ind <- apply(mtcars[,c(4,6:7)], 2, function(x)which.max(x))
mtcars[row.ind,c(1,4,6:7)]