如何从数据框中按顺序排名前n位公司

时间:2012-08-29 23:27:31

标签: r sorting plyr top-n

我正试图从数据框中获得顶级'n'公司。这是我的代码。

data("Forbes2000", package = "HSAUR")
sort(Forbes2000$profits,decreasing=TRUE)

现在我想从这个有序矢量中获得前50个观测值。

4 个答案:

答案 0 :(得分:24)

headtail是非常有用的功能!

head(sort(Forbes2000$profits,decreasing=TRUE), n = 50)

如果您想要data.frame的前50行,那么您可以使用arrange中的plyr函数对data.frame进行排序,然后使用head < / p>

library(plyr)

head(arrange(Forbes2000,desc(profits)), n = 50)

请注意,我在profits的调用中包裹了desc,这意味着它将按递减顺序排序。

没有plyr工作

head(Forbes2000[order(Forbes2000$profits, decreasing= T),], n = 50)

答案 1 :(得分:9)

使用orderdata.frame进行排序,然后使用head仅获取前50行。

data("Forbes2000", package = "HSAUR")
head(Forbes2000[order(Forbes2000$profits, decreasing=TRUE), ], 50)

答案 2 :(得分:3)

您可以使用rank中的dplyr

    library(dplyr)
    top_fifty <- Forbes2000 %>%
         filter(rank(desc(profits))<=50)

按降序对数据进行排序,只保留等级小于或等于50的值(即前50位)。
Dplyr非常有用。命令和链接语法非常容易理解。 10/10会推荐。

答案 3 :(得分:1)

Mnel是正确的,一般来说,你想使用head()和tail()函数以及一个排序函数。我应该提一下,对于中等数据集,Vince的方法工作得更快。如果你没有使用head()或tail(),那么你可以使用基本的子部分调用operator [] ....

 library(plyr)
 x = arrange(Forbes2000,desc(profits))
 x = x[1:50,]
 #Or using Order
 x = Forbes2000[order(Forbes2000$profits, decreasing= T),]
 x = x[1:50,]

但是,我确实推荐使用head(),tail()或filter()函数,因为regular []运算符假设您的数据采用易于绘制的数组或矩阵格式。 (希望,这回答了Teja问题)

现在你选择哪种蛋糕主要是主观的。不过阅读人们的评论,我会说选择使用plyr的arrange(),{bases}的order()和{utils} head()和tails,或plyr()在很大程度上取决于内存大小和行大小你的数据集。我可以详细了解Plyr,有时Dplyr是如何解决大型复杂数据集的问题,但我不想偏离主题。

P.S。这是我第一次回答,所以感谢您的反馈。