汇总每月总和,然后得到所有月度总和的平均值

时间:2012-02-06 16:53:15

标签: r aggregate

下面的列表是使用以下代码段在时间序列中与每个月对应的数据总和:

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 个答案:

答案 0 :(得分:5)

您也可以通过一次调用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))}
           )

答案 1 :(得分:4)

您可以使用2个aggregate语句执行此操作:

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