我想从数据框中获得顶级'n'公司。以下是我的代码。如何从数据框中降序排名前n位公司
data("Forbes2000", package = "HSAUR")
sort(Forbes2000$profits,decreasing=TRUE)
现在我想从这个排序的向量中得到前50个观测值。
我想从数据框中获得顶级'n'公司。以下是我的代码。如何从数据框中降序排名前n位公司
data("Forbes2000", package = "HSAUR")
sort(Forbes2000$profits,decreasing=TRUE)
现在我想从这个排序的向量中得到前50个观测值。
head
和tail
是非常有用的功能!
head(sort(Forbes2000$profits,decreasing=TRUE), n = 50)
如果你想第50行的data.frame的,那么你可以使用arrange
功能从plyr
到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)
您可以从dplyr
使用rank
。
library(dplyr)
top_fifty <- Forbes2000 %>%
filter(rank(desc(profits))<=50)
这样按降序排列数据,只保留排名小于或等于50的值(即排名前50)。
Dplyr非常有用。命令和链接语法很容易理解。 10/10会推荐。
也可以使用'top_n(n = 50,wt = profit)'而不是'filter(...)' – andrasz
Mnel是正确的,一般情况下,您想要使用head()和tail()函数以及排序函数。对于中等数据集,我应该提到Vince的方法工作得更快。如果您没有使用头()或尾部(),那么你可以使用的基本款电话运营商[] ....
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,]
不过,我真的建议头(),尾巴() ,或filter()函数,因为常规[]运算符假定您的数据是以易于绘制的数组或矩阵格式构造的。 (希望,这回答了泰雅的问题)
现在你选择哪个pacakage主要是主观的。然而,阅读人们的评论,我会说使用plyr的arrange(),{bases}的order()与{utils} head()和tail或者plyr()的选择很大程度上取决于内存大小和行大小你的数据集。我可以详细了解Plyr和Dplyr如何在大型复杂数据集中遇到问题,但我不想脱离主题。
P.S.这是我第一次回答这样的反馈意见。
上帝我爱plyr。 – bstockton