[英]calculation of anomalies on time-series
我想计算几个站点的时间序列的月温度异常。 我在这里称“异常”是单个值与一个时期计算的平均值的差异。
我的数据框看起来像这样(我们称之为“数据”):
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)。
你可以在基数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
,该组合在指定范围内没有年份。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.