如何从数据框中按降序获得前 n 家公司

Posted

技术标签:

【中文标题】如何从数据框中按降序获得前 n 家公司【英文标题】:How to get top n companies from a data frame in decreasing order 【发布时间】:2012-08-29 23:27:30 【问题描述】:

我正在尝试从数据框中获取前“n”家公司。下面是我的代码。

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

现在我想从这个排序的向量中获得前 50 个观察值。

【问题讨论】:

【参考方案1】:

headtail 是非常有用的函数!

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

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

library(plyr)

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

请注意,我将 profits 包装在对 desc 的调用中,这意味着它将按降序排序。

不用 plyr 也能工作

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

您可以从dplyr 使用rank

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

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

【讨论】:

也可以使用top_n(n = 50, wt = profits) 代替filter(...)【参考方案4】:

Mnel 是对的,一般来说,您希望使用 head() 和 tail() 函数以及排序函数。我应该提一下,对于中等数据集,Vince 的方法工作得更快。如果你没有使用 head() 或 tail(),那么你可以使用基本的 subsection 调用运算符 []....

 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() 函数,因为常规 [] 运算符假定您的数据以易于绘制的数组或矩阵格式结构化。 (希望这能回答 Teja 的问题)

现在您选择哪种包装很大程度上是主观的。但是阅读人们的cmets,我会说选择使用plyr的arrange(),bases的order()和utils head()和tails,或者plyr()很大程度上取决于内存大小和行大小你的数据集。我可以更详细地介绍 Plyr 和有时 Dplyr 如何在处理大型复杂数据集时遇到问题,但我不想跑题。

附:这是我第一次回答,因此非常感谢您的反馈。

【讨论】:

以上是关于如何从数据框中按降序获得前 n 家公司的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android Firebase实时数据库中按降序获取孩子[重复]

在django模板中按降序对相关项目进行排序

如何在Ruby中按降序对数组进行排序

如何在php中按降序对数组进行排序?

如何使用extjs4.1在网格中按降序对带有连字符的浮点值进行排序

在 PostgreSQL 的窗口函数中按降序聚合排序