Сумма строк на основе значения столбца
Я хочу суммировать строки, которые имеют одинаковое значение в одном столбце:
> 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?
- Как инициализировать пустой фрейм данных (количество столбцов одновременно) в R
- Блочно-диагональное связывание матриц
- Линейная регрессия с известным фиксированным перехватом в R
- Как подмножить данные в R без потери строк NA?
- Преобразование точек широты и долготы в UTM
Это результат, который я хочу:
X1 X2 X3 1 a 4 7 2 b 5 3 3 c 8 7
- Не удалось обновить пакеты R в библиотеке по умолчанию в Windows 7
- Как удалить строки в фрейме данных?
- if-else vs ifelse со списками
- Получить определенный объект из файла Rdata
- Соединение по отсутствующим значениям с помощью geom_line
- Возврат первой строки группы
- Метод для извлечения соответствия stat_smooth
- Доступ к объекту с нечетным именем, возвращаемым getSymbols
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
.