ddply
とave
アプローチはどちらもかなりリソースを消費すると思います。ave
私の現在の問題(67,608行、一意のキーを定義する4つの列)のメモリが不足して失敗します。tapply
は便利な選択ですが、私が一般的に行う必要があるのは、各一意のキー(通常は複数の列で定義されます)に対してsomething-estsome-valueを持つすべての行全体を選択することです。私が見つけた最善の解決策は、並べ替えを実行してから、の否定を使用しduplicated
て、一意のキーごとに最初の行のみを選択することです。ここでの簡単な例:
a <- sample(1:10,100,replace=T)
b <- sample(1:100,100,replace=T)
f <- data.frame(a, b)
sorted <- f[order(f$a, -f$b),]
highs <- sorted[!duplicated(sorted$a),]
ave
少なくともddply
、パフォーマンスの向上はかなりのものだと思います。複数列のキーの場合は少し複雑ですが、データフレームでorder
並べ替えてduplicated
機能するために多くのことを処理するため、このアプローチを引き続き使用することができます。