10

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

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

ここで、この並べ替えられたベクトルから上位 50 個の観測値を取得したいと考えています。

4

4 に答える 4

27

headtail本当に便利な機能です!

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。これは、降順でソートされることを意味します。

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

head(Forbes2000[order(Forbes2000$profits, decreasing= T),], n = 50)
于 2012-08-29T23:30:28.730 に答える
10

を使用orderして並べ替えdata.frame、次にを使用headして最初の50行のみを取得します。

data("Forbes2000", package = "HSAUR")
head(Forbes2000[order(Forbes2000$profits, decreasing=TRUE), ], 50)
于 2012-08-29T23:40:22.920 に答える
1

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() 関数を本当にお勧めします。(うまくいけば、これはテジャの質問に答えます)

どのパッケージを選択するかは、主に主観的なものです。しかし、人々のコメントを読むと、plyr の Arrange()、{bases} の order() を {utils} の head() と tails で使用するか、または plyr() を使用するかの選択は、メモリ サイズと行サイズに大きく依存すると言います。あなたのデータセット。Plyr と、場合によっては Dplyr が大規模で複雑なデータセットに問題を抱えていることについて、さらに詳しく説明することもできますが、本題から外れたくはありません。

PSこれは私の初めての回答の1つであるため、フィードバックをいただければ幸いです。

于 2016-11-29T02:42:28.213 に答える