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

时间:2015-03-24 16:14:00

标签: r dataframe subset

我有一个数据框abc,并且希望将数据框子集化为仅包含具有某个变量的第n个最高值的行" z"。我知道这里有一个简单的解决方案:

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

但是,如果没有先订购数据框,有没有办法做到这一点?我只是问,因为在较大的数据帧上排序似乎很昂贵。

以下是使用的示例:

    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

1 个答案:

答案 0 :(得分:3)

您可以尝试

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