2011-02-01 16 views
4

データフレーム内の行を選択して並べ替えることは、私を逃すことであり、同時に私を夢中にさせることです。例えば、些細なデータフレームを持っていることができます:行を選択して結果を並べ替えるR

country = c("US", "US", "CA", "US") 
company = c("Apple", "Google", "RIM", "MS") 
vals = c(100, 70, 50, 90) 
df <- data.frame(country, company, vals) 

はヴァルス完璧に動作

> df[order(vals),] 
    country company vals 
3  CA  RIM 50 
2  US Google 70 
4  US  MS 90 
1  US Apple 100 
順にできます。今では米国の企業だけを選び、そこに値を注文しようとします。我々はいくつかの偽の結果を得る。

> df[country=="US", ][order(vals),] 
    country company vals 
4  US  MS 90 
2  US Google 70 
NA <NA> <NA> NA 
1  US Apple 100 

を順序付けしてから選択します。ここでも、偽の結果

> df[order(vals),][country=="US", ] 
    country company vals 
3  CA  RIM 50 
2  US Google 70 
1  US Apple 100 

にはどうすればいいだけ米国企業が含まれており、valでソートされたデータフレームを、得るのですか?

+0

これを実行する前に 'df'を作るために使われた変数を削除してください。これは' df'のものではないからです。これは問題を解決するものではありませんが、助けになります... –

+1

http://www.ats.ucla.edu/stat/r/faq/sort.htm –

答えて

6

は確かにあなたは、[にサブセット化のコールのセットを介してこれを行うことができません。私はいつもそれが奇数ベースRのようなデータフレームを並べ替えるための利便性を持っていなかったことがわかっ

> with(df, subset(df[order(vals),], subset = country == "US")) 
    country company vals 
2  US Google 70 
4  US  MS 90 
1  US Apple 100 
+0

+1私は常にサブセットアプローチを好む。やや簡素化 - 'subset()'の中で 'subset ='と言う必要はありません。 –

+3

特に、私が上記の '' subset = FOO'と書くと、私は明らかに '' subset''を使うことになっていて、他の引数ではないので、コードのデモンストレーションや再現性のあるコードの記述には、 。だからあなたは正しいと思いますが、私はこのことを綴る必要はありませんが、もしそうなら、そうするのがより安全だとわかります。 –

1
> df[df$country=="US",][order(df[df$country=="US","vals"]),] 
    country company vals 
2  US Google 70 
4  US  MS 90 
1  US Apple 100 

元の変数を削除して、データフレーム(国の代わりにdf $の国)で作業するのは良い習慣だと思います。 2番目のサブセットの呼び出しで注文または低減されたデータフレームを参照する必要があるとして

+0

これはうまく動作しますが、実際には '国== "US"は2回サブセット化されます。特に '' country == '' US ''の計算コストが実際のデータで高い場合、例えば 'tmp < - df [order(df $ vals)]のように、2つのステップを別々に行う方が簡単です。それに続いて 'tmp [tmp $ country ==" US "、]'が続きます。並べ替えの手順が有害でない場合は、 'tmp'を' df'に置き換えてください。 –

+0

私は同意し、私は最初にあなたの正確な2ライナーを書いていました。何らかの理由で私はステップを組み合わせることに決めました。私はあなたのソリューションがより好きです。 – ncray

6

:一つの方法は、データを注文し、この注文データフレームから行を選択するsubset()にこれを供給することですサブセッティングのために行います。だから私は自分自身を書いた:

関連する問題