Die ddply
und ave
Ansätze sind beide ziemlich ressourcenintensiv, denke ich. ave
schlägt fehl, weil nicht genügend Speicher für mein aktuelles Problem zur Verfügung steht (67.608 Zeilen, wobei vier Spalten die eindeutigen Schlüssel definieren). tapply
ist eine praktische Wahl, aber was ich in der Regel tun muss, ist die Auswahl aller ganzen Zeilen mit dem etwas est-Wert für jeden eindeutigen Schlüssel (normalerweise definiert durch mehr als eine Spalte). Die beste Lösung, die ich gefunden habe, ist eine Sortierung durchzuführen und dann die Negation duplicated
zu verwenden, um nur die erste Zeile für jeden eindeutigen Schlüssel auszuwählen. Für das einfache Beispiel hier:
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),]
denke ich, die Performance-Gewinne über ave
oder ddply
zumindest erheblich sind. Es ist ein wenig komplizierter für mehrspaltige Schlüssel, aber order
behandelt eine ganze Reihe von Dingen zu sortieren und duplicated
arbeitet auf Datenrahmen, so ist es möglich, diesen Ansatz weiter zu verwenden.
Schmelze (a.3, id = c ("a.2")) -> h.2; Umwandlung (h.2, a.2 ~, max) Führt den Trick in diesem Beispiel aus, aber der Computer hat nicht genügend Arbeitsspeicher, wenn ich ihn auf meinen ursprünglichen Datensatz anwende. So hat mir wirklich nicht viel geholfen. – Misha