10

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

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

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

4

4 回答 4

27

head并且tail是非常有用的功能!

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

如果你想要 data.frame 的前 50 行,那么你可以使用arrange函数 fromplyrdata.frame然后使用head

library(plyr)

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

请注意,我包装profits了一个调用,desc这意味着它将按降序排序。

没有 plyr 工作

head(Forbes2000[order(Forbes2000$profits, decreasing= T),], n = 50)
于 2012-08-29T23:30:28.730 回答
10

用于order对 进行排序data.frame,然后用于head仅获取前 50 行。

data("Forbes2000", package = "HSAUR")
head(Forbes2000[order(Forbes2000$profits, decreasing=TRUE), ], 50)
于 2012-08-29T23:40:22.920 回答
6

您可以使用rank来自dplyr.

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

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

于 2016-11-29T01:12:09.757 回答
1

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

 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 的问题)

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

PS这是我第一次回答,因此感谢您的反馈。

于 2016-11-29T02:42:28.213 回答