Сумма по отдельному значению столбца в R

У меня есть очень большой фрейм данных в 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))

что:

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

И я хотел бы суммировать продажи и прибыль для каждого магазина, чтобы дать:

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

В настоящее время я использую следующий код для этого:

 shop_day <-ddply(shop, "shop_id", transform, sale=sum(sale), profit=sum(profit))
 shop_day <- subset(shop_day, !duplicated(shop_id))

который работает абсолютно нормально, но, как я уже сказал, мой фрейм данных большой (140 000 строк, 37 столбцов и почти 100 000 уникальных строк, которые я хочу суммировать ), и мой код работает целую вечность, а затем в конце концов говорит, что он исчерпал объем памяти.

Кто-нибудь знает самый эффективный способ сделать это.

Заранее спасибо!

10
задан Matt Dowle 2 August 2012 в 21:34
поделиться