子集数据框仅包含列的第 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
我有一个数据框 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