Сумма строк на основе значения столбца
Я хочу суммировать строки, которые имеют одинаковое значение в одном столбце:
> 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?
- Хранение объектов ggplot в списке из цикла в R
- Вычислить кумулятивную сумму в каждом идентификаторе (группе)
- R из Java
- R форматов данных: RData, Rda, RDS и т. Д.
- Наследование в R
Это результат, который я хочу:
X1 X2 X3 1 a 4 7 2 b 5 3 3 c 8 7
- Нумерация строк внутри групп в кадре данных
- Преобразование эпохи UNIX в объект Date
- как добавить слои в ggplot, используя for-loop
- идентифицировать группы связанных эпизодов, которые соединяются вместе
- ggmap Ошибка: GeomRasterAnn был построен с несовместимой версией ggproto
- R - упорядочение в коробке
- Разница между as.POSIXct / as.POSIXlt и strptime для преобразования векторов символов в POSIXct / POSIXlt
- Можно ли использовать dcast без агрегатной функции?
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
.