我正试图从数据框中获得顶级'n'公司。这是我的代码。
data("Forbes2000", package = "HSAUR")
sort(Forbes2000$profits,decreasing=TRUE)
现在我想从这个有序矢量中获得前50个观测值。
答案 0 :(得分:24)
head
和tail
是非常有用的功能!
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)
使用order
对data.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。这是我第一次回答,所以感谢您的反馈。