簡體   English   中英

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

[英]How to extract the row with min or max values?

使用這樣的數據框:

        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),]

一個(相對較新的)替代方法是使用slice_max tidyverseslice_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_maxslice_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還為slice_headslice_tailslice_sample等常見用例提供了更多幫助函數。

您還可以使用子集和最大函數來調用該行:

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

如果您有興趣找到某些組的最小值/最大值,那么您可以在 tidyverse 中組合 group_by 和 slice_max。 在此示例中,假設您想知道每年的最高溫度,那么您將執行以下操作:

df %>% group_by(Temp) %>% slice_max(Temp)

只是另一種最大化 tidyverse 包的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM