如何使用最小值或最大值提取行?

时间:2013-10-18 12:25:22

标签: r

也许是一个简单的问题,但我无法找到解决问题的好方法。 像这样的df:

        ID  Year    Temp    ph
1       P1  1996    11.3    6.80
2       P1  1996    9.7     6.90
3       P1  1997    9.8     7.10
...
2000    P2  1997    10.5    6.90
2001    P2  1997    9.9     7.00
2002    P2  1997    10.0    6.93

如果我想知道我输入的最大值在哪里:

which.max(df$Temp)

和R打印行的索引,例如665。

因此,如果我想读取并提取包含所有相关值的列,我必须输入:

df[665,]

是否有更简单的方法可以知道哪个ID与df的特定列的最大值相关?

3 个答案:

答案 0 :(得分:44)

您可以将which.max来电作为您的子集调用的第一个参数:

df[which.max(df$Temp),]

答案 1 :(得分:2)

(相对较新的)替代方法是使用slice_max中的slice_min(或tidyverse)。以mtcars为例:

library(tidyverse)
mtcars %>% slice_max(mpg)
#                 mpg cyl disp hp drat    wt qsec vs am gear carb
# Toyota Corolla 33.9   4 71.1 65 4.22 1.835 19.9  1  1    4    1

mtcars %>% slice_min(mpg)
#                      mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Cadillac Fleetwood  10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
# Lincoln Continental 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4

请注意,slice_maxslice_min为您提供 all 所有行,这些行在指定列中具有最大值或最小值(如调用mtcars[mtcars$mpg == min(mtcars$mpg), ]。因此,如果您只想要第一行(如调用mtcars[which.min(mtcars$mpg), ]中的行),则需要再次切片:

mtcars %>% slice_min(mpg) %>% slice(1)
#                     mpg cyl disp  hp drat   wt  qsec vs am gear carb
# Cadillac Fleetwood 10.4   8  472 205 2.93 5.25 17.98  0  0    3    4

此外,slice还为诸如slice_headslice_tailslice_sample等常见用例提供了更多帮助功能。

答案 2 :(得分:1)

您还可以使用子集和max函数来调用该行:

df[df$Temp == max(df$Temp),]