[英]How to extract the min/max values in a dataframe to display data as a ribbon?
[英]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
tidyverse
或slice_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_max
和slice_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_head
、 slice_tail
和slice_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.