R 如何提取具有最小值或最大值的行?

R 如何提取具有最小值或最大值的行?,r,max,min,R,Max,Min,使用这样的数据帧: 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 如果我想知道

使用这样的数据帧:

        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特定列的最大值相关?

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

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

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

df[df$Temp == max(df$Temp),]
一种(相对较新的)替代方法是使用
tidyverse
中的
slice\u max
(或
slice\u min
)。以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\u max
slice\u min
为您提供了所有行,这些行在指定列中有一个max或min值(如调用
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\u head
slice\u tail
slice\u sample
df[which.max(df$Temp),]?还是你要问更复杂的事情?Ahrrhh…我尝试了很多方法,但我没想到它会这么简单。谢谢!!还考虑<代码>子集(DF,TEMP= = MAX(TEMP))< /C> >,它给出了所有的行,其<代码> TEMP是最大的(而<代码>,Max < /Cord>解决方案给出一个这样的行).如果向量是双峰的呢?@JaySchylerRaadt:看。尽管你可能需要这样做。