2つのデータカテゴリ間で連続変数に基づいてデータフレームをソートしようとしています。具体的には、連続変数をソート(降順)したいが、同じタイプの変数をまとめて保存したい。ここに例があります:split-apply-combine:複数の変数をソートしてグループ化するR
pets <- data.frame(animal = c("dog", "dog", "dog", "cat", "cat", "fish", "fish", "fish"),
breed = c("retriever", "husky", "husky", "grey", "white", "guppy", "betta", "betta"),
count = c(4, 3, 7, 8, 9, 2, 12, 1))
今、データフレームはソートされていません。最高の平均値がcount
のbreeds
が最初に表示されるようにソートしますが、すべてbreed
(およびanimal
秒)はまとめてグループ化されています。 breed
に基づいてフレームを注文すると、count
の正しい順序が失われ、逆も同様です。両方とも試してみても、
pets[with(pets, order(breed, -count)), ]
出力が正しくソートされません。私はsplit-apply-combine tutorialsを調べましたが、私のデータにあるように2つではなく、1つのグループのデータをまとめて保存しようとしたものだけが見つかりました。
は今のところ、これは私が持っている最高のされています
split_pets <- split(pets, pets$animal)
unlist(lapply(split_pets, function(x) sort(with(x, tapply(count, breed, mean)), decreasing = TRUE)))
cat.white cat.grey dog.husky dog.retriever fish.betta fish.guppy
9.0 8.0 5.0 4.0 6.5 2.0
確かに返すには、私は彼らが行く正しい順序を持っている。しかし、私にはありません。実際には手段を気にして、私はちょうどこれに基づいてデータフレームを並べ替える必要があります。次は、品種に基づいてこれを再び分割するウサギの穴が塞がっていますが、リストのリストのデータフレームの列に基づいてソートしています。それはあまりにも複雑に聞こえる。私もorder
を試してみたのですが、group_by()
からdplyr
にそれを配管しましたが、今まで以上に私を得ることはできませんでした。
ありがとうございました!
このソリューションは、私がいたソリューションパスよりもはるかにエレガントです。しかし、この正確なコードを実行すると、エラーが発生します。 'エラー:'によって 'LHS' 行に行方不明の「動物」、「品種」が含まれていませんright_join()に来てください – AcademicDialysis
私の最後のコメントのバグを解決しました。問題は、 'plyr'が自分のネームスペースに' dplyr'の前にロードされ、 'group_by'から出てきたグループごとに1つではなく、ただ一つの平均で' summary'結果が得られたということでした。ここでそれにつまずいた:https://stackoverflow.com/questions/26923862/why-are-my-dplyr-group-by-summarize-not-working-properly-name-collision-with – AcademicDialysis