也许是一个简单的问题,但我无法找到解决问题的好方法.像这样的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
Run Code Online (Sandbox Code Playgroud)
如果我想知道我输入的最大值在哪里:
which.max(df$Temp)
Run Code Online (Sandbox Code Playgroud)
并且R打印行的索引,例如665.
所以,如果我想读取并提取包含所有相关值的列,我必须输入:
df[665,]
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来知道哪个ID与df的特定列的最大值相关?
Jos*_*ich 51
您可以将您的which.max呼叫作为子集呼叫的第一个参数包括在内:
df[which.max(df$Temp),]
Run Code Online (Sandbox Code Playgroud)
一个(相对较新的)替代方法是使用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
Run Code Online (Sandbox Code Playgroud)
请注意,slice_max并slice_min为您提供在指定列中具有最大值或最小值的所有行(如 call mtcars[mtcars$mpg == min(mtcars$mpg), ]。因此,如果您只想要第一行(如在 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
Run Code Online (Sandbox Code Playgroud)
此外,slice还为诸如slice_head、slice_tail和等常见用例提供了更多帮助函数slice_sample。