Ho un dataframe molto grande in R e vorrei sommare due colonne per ogni valore distinto in altre colonne, ad esempio diciamo che avevamo dati di un dataframe di transazioni in vari negozi in un giorno come segueSomma per valore colonna distinto in R
shop <- data.frame('shop_id' = c(1, 1, 1, 2, 3, 3),
'shop_name' = c('Shop A', 'Shop A', 'Shop A', 'Shop B', 'Shop C', 'Shop C'),
'city' = c('London', 'London', 'London', 'Cardiff', 'Dublin', 'Dublin'),
'sale' = c(12, 5, 9, 15, 10, 18),
'profit' = c(3, 1, 3, 6, 5, 9))
che è:
shop_id shop_name city sale profit
1 Shop A London 12 3
1 Shop A London 5 1
1 Shop A London 9 3
2 Shop B Cardiff 15 6
3 Shop C Dublin 10 5
3 Shop C Dublin 18 9
e vorrei riassumere la vendita e profitto per ogni negozio di dare:
shop_id shop_name city sale profit
1 Shop A London 26 7
2 Shop B Cardiff 15 6
3 Shop C Dublin 28 14
Attualmente sto usando il seguente codice per fare questo:
shop_day <-ddply(shop, "shop_id", transform, sale=sum(sale), profit=sum(profit))
shop_day <- subset(shop_day, !duplicated(shop_id))
che funziona assolutamente bene, ma come ho detto il mio dataframe è di grandi dimensioni (140.000 righe, 37 colonne e circa 100.000 righe uniche che voglio riassumere) e il mio codice impiega anni per essere eseguito e poi alla fine dice che ha esaurito la memoria.
Qualcuno sa del modo più efficiente per farlo.
Grazie in anticipo!
... Sento una risposta 'data.table' in arrivo ... –