也许是一个简单的问题,但我无法找到解决问题的好方法。 像这样的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
如果我想知道我输入的最大值在哪里:
which.max(df$Temp)
和R打印行的索引,例如665。
因此,如果我想读取并提取包含所有相关值的列,我必须输入:
df[665,]
是否有更简单的方法可以知道哪个ID与df的特定列的最大值相关?
答案 0 :(得分:44)
您可以将which.max
来电作为您的子集调用的第一个参数:
df[which.max(df$Temp),]
答案 1 :(得分:2)
(相对较新的)替代方法是使用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_max
和slice_min
为您提供 all 所有行,这些行在指定列中具有最大值或最小值(如调用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
等常见用例提供了更多帮助功能。
答案 2 :(得分:1)
您还可以使用子集和max函数来调用该行:
df[df$Temp == max(df$Temp),]