仅包括列的第n个最高值的子集数据框 [英] Subset data frame to only include the nth highest value of a column

查看:7
本文介绍了仅包括列的第n个最高值的子集数据框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据框ABC,并且想要将该数据框子集为仅包括具有某一变量z的第n个最高值的行。我知道这里有一个简单的解决方案:

       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

这篇关于仅包括列的第n个最高值的子集数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆