我有一个数据框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
答案 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