Mam bardzo dużą ramkę danych w R i chciałbym podsumować dwie kolumny dla każdej odrębnej wartości w innych kolumnach, na przykład, że mieliśmy dane o ramce danych transakcji w różnych sklepach w ciągu jednego dnia następującoSuma przez odrębną wartość kolumny w 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))
który jest:
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
i chciałbym podsumować sprzedaż i zysk dla każdego sklepu, aby dać:
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
Obecnie używam następujący kod, aby to zrobić:
shop_day <-ddply(shop, "shop_id", transform, sale=sum(sale), profit=sum(profit))
shop_day <- subset(shop_day, !duplicated(shop_id))
który działa całkowicie w porządku, ale jak powiedziałem moim dataframe jest duża (140.000 wierszy, 37 kolumn i prawie 100.000 unikalnych wierszy, które chcę sumę) i mój kod trwa wieki, a potem w końcu mówi, że zabrakło mu pamięci.
Czy ktoś wie o najbardziej efektywny sposób to zrobić.
Z góry dziękuję!
... Czuję, że odpowiedź "data.table" nadchodzi ... –