38

使用这样的数据框:

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

4

3 回答 3

77

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

df[which.max(df$Temp),]
于 2013-10-18T12:32:28.920 回答
10

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

df[df$Temp == max(df$Temp),]
于 2019-02-04T14:53:21.410 回答
9

一个(相对较新的)替代方法是使用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为您提供在指定列中具有最大值或最小值的所有mtcars[mtcars$mpg == min(mtcars$mpg), ]行(例如 call 。因此,如果您只想要第一行(例如在 call 中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.

于 2020-10-15T12:04:35.537 回答