Los ddply
y ave
enfoques son a la vez bastante intensivos en recursos, creo. ave
falla al quedarse sin memoria para mi problema actual (67,608 filas, con cuatro columnas que definen las claves únicas). tapply
es una elección práctica, pero lo que generalmente necesito hacer es seleccionar todas las filas con el algo-valor de algún valor para cada clave única (generalmente definida por más de una columna). La mejor solución que he encontrado es hacer una ordenación y luego usar la negación de duplicated
para seleccionar solo la primera fila para cada clave única. Para el ejemplo simple aquí:
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),]
Creo que las mejoras de rendimiento más ave
o ddply
, al menos, son sustanciales. Es un poco más complicado para llaves de múltiples columnas, pero order
manejará un montón de cosas para ordenar y duplicated
funciona en marcos de datos, por lo que es posible continuar utilizando este enfoque.
de fusión (a.3, id = c ("a.2")) -> h.2; cast (h.2, a.2 ~, max) Hace el truco en este ejemplo, pero la computadora se queda sin memoria cuando la aplico a mi conjunto de datos original. Entonces realmente no me ayudó mucho. – Misha