下面的列表是使用以下代码段在时间序列中与每个月对应的数据总和:
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)
我只是得到了时间序列中所有月份的总和,这是我不想要的。我可以在一个聚合语句中实现所需的结果,还是需要更多代码...任何帮助将不胜感激。
答案 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)