агрегирование ежемесячных сумм, а затем получение среднего значения всех ежемесячных сумм - PullRequest
4 голосов
/ 06 февраля 2012

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

aggregate(data, by=list(Year=format(DateTime, "%Y"), Month=format(DateTime, "%m")), sum, na.rm=TRUE)

Year Month        x
1   1981    01 62426.43
2   1982    01 70328.87
3   1983    01 67516.34
4   1984    01 64454.00
5   1985    01 78801.46
6   1986    01 73865.18
7   1987    01 64224.96
8   1988    01 72362.39
9   1981    02 74835.16
10  1982    02 75275.58
11  1983    02 67457.39
12  1984    02 64981.99
13  1985    02 56490.10
14  1986    02 62759.89
15  1987    02 65144.44
16  1988    02 67704.67

Эта часть проста ... но я пытаюсь получить среднее значение всех месячных сумм за каждый месяц (т.е. одно среднее значение сумм за каждый месяц) Если я сделаю следующее:

aggregate(data, by=list(Month=format(DateTime, "%m")), sum, na.rm=TRUE)

Я просто получаю сумму всех месяцев во временном ряду, чего я не хочу. Могу ли я достичь желаемого результата в одном агрегированном выражении, или мне нужно больше кода ... Любая помощь будет оценена.

Ответы [ 2 ]

5 голосов
/ 06 февраля 2012

Вы также могли бы сделать это с помощью одного вызова aggregate:

aggregate(data, 
          by=list(Year=format(DateTime, "%Y"), Month=format(DateTime, "%m")), 
          FUN= function(x){ sum(x, na.rm=TRUE)/sum(!is.na(x))}
           )
4 голосов
/ 06 февраля 2012

Вы можете сделать это с 2 aggregate утверждениями:

aggregate(x~Month, aggregate(data, by=list(Year=format(DateTime, "%Y"), Month=format(DateTime, "%m")), sum, na.rm=TRUE), mean)
...