2013-05-07 87 views
0

我想計算與多個臺站的時間序列上的每月溫度異常。 我在這裏稱之爲「異常」,即從一個時期的平均值計算出的單個值的差異。時間序列上的異常計算

我的數據幀看起來像這樣(我們稱之爲 「數據」):

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的值之間的差異......但我不確定是否以正確的方式(我沒有看到如何使用data3)。

+0

什麼是Tmean? – 2013-05-07 13:30:52

+0

它是Temp ...我改變了它 – user2165907 2013-05-07 13:31:47

回答

1

你可以在基礎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■對於具有在指定範圍內無數年來月 - 站組合。

+0

對不起,我改變了(再次)我的第一篇文章:平均值必須計算在1980年和1990年之間,但是必須計算所有年份的初始數據集的異常 – user2165907 2013-05-07 13:45:44

+0

我不認爲這是計算我想要的。也許我的解釋不清楚。我想得到的是:i)對於每個臺站和每個月,1980到1990之間的平均值ii)對於每個臺站,每個月以及數據集的所有年份,獲得平均值之間的差值1980年和1990年)和記錄的價值...這就是我所說的「異常」 – user2165907 2013-05-07 15:14:06

+0

這就是這樣做,但它然後從每個溫度中減去該平均值。取出'Temp'來查看手段。 – 2013-05-07 15:17:20