Сумма строк на основе значения столбца

Я хочу суммировать строки, которые имеют одинаковое значение в одном столбце:

> df  df X1 X2 X3 1 a 1 3 2 b 5 3 3 a 3 4 4 c 6 5 5 c 2 2 

Для одного столбца (X2) данные могут быть агрегированы для получения сумм всех строк, имеющих одно и то же значение X1:

 > ddply(df, .(X1), summarise, X2=sum(X2)) X1 X2 1 a 4 2 b 5 3 c 8 

Как мне сделать то же самое для X3 и произвольное количество других столбцов, кроме X1?

Это результат, который я хочу:

  X1 X2 X3 1 a 4 7 2 b 5 3 3 c 8 7 

 ddply(df, "X1", numcolwise(sum)) 

см. « ?numcolwise для подробностей и примеров.

aggregate может легко сделать это с помощью интерфейса формулы:

 aggregate(. ~ X1, data=df, FUN=sum) ## X1 X2 X3 ## 1 a 4 7 ## 2 b 5 3 ## 3 c 8 7 

Эквивалентное:

 aggregate(cbind(X2, X3) ~ X1, data=df, FUN=sum) 

aggregate – отличная функция для таких вещей:

 aggregate(df[,-1],df["X1"],sum) X1 X2 X3 1 a 4 7 2 b 5 3 3 c 8 7 

И базовая версия R numcolwise метода от plyr:

 aggregate(df[,sapply(df,is.numeric)],df["X1"],sum) 

Решение data.table для эффективности памяти и элегантности кодирования

 library(data.table) DT <- data.table(df) DT[, lapply(.SD, sum), by = X1] 

.SD - это подмножество таблицы данных. Для каждой группы, определяемой значениями X1 . Есть 3 полезные виньетки, связанные с пакетом data.table .

  • контролирующий порядок точек в ggplot2 в R?
  • Увеличить количество тиков оси
  • Доступ к URL-адресу и чтение данных с помощью R
  • Свертывание строк, где некоторые - все NA, другие не пересекаются с некоторыми NA
  • Подмножество по группам с data.table
  • Удалить все специальные символы из строки в R?
  • Как отправить электронное письмо с приложением из R в windows
  • Как вы можете прочитать CSV-файл в R с различным количеством столбцов
  • Преобразовать год / неделю на текущий объект
  • Общие рекомендации по отладке в R
  • Использование циклов с knitr для создания нескольких отчетов в формате PDF ... нужно немного помочь, чтобы получить меня за горб
  • Давайте будем гением компьютера.