子集数据框仅包含列的第 n 个最高值

Subset data frame to only include the nth highest value of a column

我有一个数据框 abc,我想对数据框进行子集化以仅包含某个变量的第 n 个最高值的行 "z"。我知道这里有一个简单的解决方案:

       library(plyr)
       abc <- arrange(abc, z)
       abc <- abc[n,]

但是有没有办法在不先订购数据框的情况下做到这一点?我之所以问,是因为在较大的数据帧上排序似乎很昂贵。

这是一个 df 示例:

    x  y   z
1   2  1 111
2   3  2 112
3   4  3 113
4   5  4 114
5   6  5 115
6   7  6 116
7   8  7 117
8   9  8 118
9  10  9 119
10 11 10 120

你可以试试

library(dplyr)
n <- 7
slice(abc, rank(z)[n])

或者正如@nicola 评论的那样,base R 选项将是

abc[rank(abc$z)==n,]

更新

如果你想要排名递增的第n名

 slice(abc, rank(-z)[n])
 #  x y   z
 #1 5 4 114
 abc[nrow(abc)-rank(abc$z)+1==n,]
 #  x y   z
 #4 5 4 114