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機能するために多くのことを処理するため、このアプローチを引き続き使用することができます。