我想從數據框中獲得頂級'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