I ddply
e ave
approcci sono entrambi abbastanza alta intensità di risorse, credo. ave
non riesce a esaurire la memoria per il mio problema corrente (67.608 righe, con quattro colonne che definiscono le chiavi univoche). tapply
è una scelta utile, ma quello che in genere devo fare è selezionare tutte le righe complete con il valore-qualcosa-est per ogni chiave univoca (di solito definita da più di una colonna). La soluzione migliore che ho trovato è di fare un ordinamento e quindi utilizzare la negazione di duplicated
per selezionare solo la prima riga per ogni chiave univoca. Per il semplice esempio qui:
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),]
Credo che l'incremento delle prestazioni oltre ave
o ddply
, almeno, sono sostanziali. È leggermente più complicato per le chiavi multi-colonna, ma lo standard order
gestirà un sacco di cose da ordinare e duplicated
funziona su frame di dati, quindi è possibile continuare a utilizzare questo approccio.
fonte
2012-09-07 18:46:01
fusione (a.3, id = c ("a.2")) -> H.2; cast (h.2, a.2 ~, max) Fa il trucco in questo esempio ma il computer esaurisce la memoria quando lo applico al set di dati originale. Quindi non mi ha davvero aiutato molto. – Misha