2011-07-20 4 views
14

データフレームの行を2つの要素で並べ替えようとしています。最初の要素については、私はデフォルトの順序に満足しています。 2番目の要素については、私は自分の注文を列に当てたいと思います。私はこの試みたデータフレームを2列並べるR

appleOrdered <- c("E", "D", "J", "A", "F", "G", "I", "B", "H", "C") 

dat <- data.frame(apple=rep(LETTERS[1:10], 3), 
        orange=c(rep("agg", 10), rep("org", 10), rep("fut", 10)), 
        pear=rnorm(30, 10), 
        grape=rnorm(30, 10)) 

は、私は特定の方法で "りんご" を注文したいと思います。ここではいくつかのダミーデータです

dat <- dat[with(dat, order(orange, rep(appleOrdered, 3))), ] 

は、しかし、それはいるようです"apple"をランダムな順序に入れてください。助言がありますか?ありがとう。

+0

に関連する[Iは、ソート1つのベクトルベースにはどうすればよいです他の値について](http://stackoverflow.com/questions/1568511/how-do-i-sort-one-vector-based-on-values-of-another) –

答えて

10

を因子レベルの並べ替え:

dat[with(dat, order(orange, as.integer(factor(apple, appleOrdered)))), ] 
+1

これは素晴らしい、ありがとう。 factor呼び出しをas.integer()でラップする理由はありますか?それを取り除くことはまったく同じ結果をもたらすようです。 – Steve

+0

サウンドが見つかりました - 要素の並べ替え順序がレベルまたはそのas.character()によって定義されていた場合、私は肯定的ではありませんでした。 – Charles

11

plyrから所望の順序でレベルとarrange機能付き係数を使用してみてください:

dat$apple <- factor(dat$apple,levels=appleOrdered) 
arrange(dat,orange,apple) 
+0

これは素晴らしい、ありがとう。 – Steve

+0

あなたは 'ordered = TRUE'は必要ありません。 –

関連する問題