web-dev-qa-db-ja.com

データフレームから上位n社を降順で取得する方法

データフレームから上位 'n'社を取得しようとしています。以下が私のコードです。

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

次に、このソートされたベクトルから上位50件の観測を取得したいと思います。

10
Teja

headtailは本当に便利な関数です!

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

Data.frameの最初の50行が必要な場合は、arrangeplyr関数を使用してdata.frameをソートし、次にheadを使用できます。

library(plyr)

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

profitsdescの呼び出しでラップしたことに注意してください。これは、降順でソートされることを意味します。

プライヤなしで作業するには

head(Forbes2000[order(Forbes2000$profits, decreasing= T),], n = 50)
25
mnel

orderを使用してdata.frameをソートし、次にheadを使用して最初の50行のみを取得します。

data("Forbes2000", package = "HSAUR")
head(Forbes2000[order(Forbes2000$profits, decreasing=TRUE), ], 50)
9
GSee

rankからdplyrを使用できます。

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

これにより、データが降順で並べ替えられ、ランクが50以下(つまり上位50)の値のみが保持されます。
Dplyrは非常に便利です。コマンドとチェーン構文は非常に理解しやすいです。 10/10をお勧めします。

4
Vince

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の配列()、{bases}の順序()を{utils}のhead()とテールで使用するか、またはplyr()を使用するかは、メモリサイズと行サイズに大きく依存します。データセット。 Plyrと、場合によってはDplyrが大規模で複雑なデータセットにどのように問題を抱えているかについて詳しく説明することはできますが、話題から抜け出したくありません。

追伸これは私の初めての回答なので、フィードバックをいただければ幸いです。

1
mlane