我正在尝试从数据框中获取前“n”家公司。下面是我的代码。
data("Forbes2000", package = "HSAUR")
sort(Forbes2000$profits,decreasing=TRUE)
现在我想从这个排序的向量中获得前 50 个观察值。
head
并且tail
是非常有用的功能!
head(sort(Forbes2000$profits,decreasing=TRUE), n = 50)
如果你想要 data.frame 的前 50 行,那么你可以使用arrange
函数 fromplyr
对data.frame
然后使用head
library(plyr)
head(arrange(Forbes2000,desc(profits)), n = 50)
请注意,我包装profits
了一个调用,desc
这意味着它将按降序排序。
没有 plyr 工作
head(Forbes2000[order(Forbes2000$profits, decreasing= T),], n = 50)
用于order
对 进行排序data.frame
,然后用于head
仅获取前 50 行。
data("Forbes2000", package = "HSAUR")
head(Forbes2000[order(Forbes2000$profits, decreasing=TRUE), ], 50)
您可以使用rank
来自dplyr
.
library(dplyr)
top_fifty <- Forbes2000 %>%
filter(rank(desc(profits))<=50)
这会按降序对您的数据进行排序,并且仅保留排名小于或等于 50 的值(即前 50 名)。
Dplyr 非常有用。命令和链接语法非常容易理解。10/10 会推荐。
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这是我第一次回答,因此感谢您的反馈。