计算时间序列的异常

时间:2013-05-07 13:26:09

标签: r time-series plyr

我想计算几个站点的时间序列的月温度异常。 我在这里称之为“异常”,即单个值与期间计算的平均值的差异。

我的数据框看起来像这样(我们称之为“数据”):

Station Year Month Temp
A 1950 1 15.6
A 1980 1 12.3
A 1990 2 11.4
A 1950 1 15.6
B 1970 1 12.3
B 1977 2 11.4
B 1977 4 18.6
B 1980 1 12.3
B 1990 11 7.4

首先,我制作了一个包含1980年到1990年之间年份的子集:

data2 <- subset(data, Year>=1980& Year<=1990)

其次,我使用plyr计算1980年至1990年期间每个站点的月均值(我们称之为“MeanBase”):

data3 <- ddply(data2, .(Station, Month), summarise,
               MeanBase = mean(Temp, na.rm=TRUE))

现在,我想为每一行数据计算相应的MeanBase与Temp的值之间的差异...但我不确定是否正确(我看不到)如何使用数据3)。

1 个答案:

答案 0 :(得分:2)

您可以在基地R中使用ave来获取此信息。

transform(data, 
          Demeaned=Temp - ave(replace(Temp, Year < 1980 | Year > 1990, NA), 
                              Station, Month, FUN=function(t) mean(t, na.rm=TRUE)))

#   Station Year Month Temp Demeaned
# 1       A 1950     1 15.6 3.3
# 2       A 1980     1 12.3 0.0
# 3       A 1990     2 11.4 0.0
# 4       A 1950     1 15.6 3.3
# 5       B 1970     1 12.3 0.0
# 6       B 1977     2 11.4 NaN
# 7       B 1977     4 18.6 NaN
# 8       B 1980     1 12.3 0.0
# 9       B 1990    11  7.4 0.0

对于没有指定范围内年份的月 - 月组合,结果列将显示NaN

相关问题