Суммарная сумма R - PullRequest
       13

Суммарная сумма R

3 голосов
/ 01 октября 2011

Я пишу свой первый программа на R, и у меня, как у новичка, есть проблемы, надеюсь, вы мне поможете.

У меня есть такой фрейм данных:

> v1<-c(1,1,2,3,3,3,4)
> v2<-c(13,5,15,1,2,7,4)
> v3<-c(0,3,6,13,8,23,5)
> v4<-c(26,25,11,2,8,1,0)
> datos<-data.frame(v1,v2,v3,v4)
> names(datos)<-c("Position","a1","a2","a3")

> datos
  posicion a1 a2 a3
1        1 13  0 26
2        1  5  3 25
3        2 15  6 11
4        3  1 13  2
5        3  2  8  8
6        3  7 23  1
7        4  4  5  0

Мне нужно суммировать данные в a1, a2 и a3 (в моем реальном случае от a1 до a51), сгруппированных в Position. Я пытаюсь использовать функцию aggregate(), но она работает только для средств, а не для сумм, и я не знаю почему.

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

Ответы [ 3 ]

15 голосов
/ 01 октября 2011

Вы должны указать агрегатной функции использовать сумму, поскольку по умолчанию она получает среднее значение для каждой категории.Например:

aggregate(datos[,c("a1","a2","a3")], by=list(datos$Position), "sum")
7 голосов
/ 01 октября 2011

Это довольно просто с библиотекой plyr.

library("plyr")
ddply(datos, .(Position), colwise(sum))

Если у вас есть дополнительные нечисловые столбцы, которые не должны быть усреднены, вы можете использовать

ddply(datos, .(Position), numcolwise(sum))
0 голосов
/ 14 сентября 2018
ag_df <-- aggregate(.~Position,data=datos,sum)

должен предоставить вам фрейм данных, содержащий суммы значений «a» для каждой позиции.Хитрость здесь в том, что . в формуле представляет список всех «не группирующих» переменных в формуле.

Обратите внимание, что вы можете получить почти такой же результат с:

sumdf <- rowsum(datos,datos$Position,na.rm=T)

За исключением того, что включает в себя также суммы позиций!агрегированные столбцы не в группе, вы можете использовать cbind следующим образом:

sumdf1 <- aggregate(cbind(a1,a3)~datos$Position,datos,sum)

Суммирует только столбцы a1 и a3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...