2017-10-16 116 views
-3

我需要一些R時間序列的幫助。我每天的溫度值爲30年= 365 * 30天= 10950天(如果不考慮最低年限)。我想創建一個「日常氣候學」,即1月1日,1月2日的每個平均值(30個值),以創建365個值的時間表。任何人都可以幫助我解決這個問題嗎?提前致謝。R每日多年平均值

+0

您可以顯示日期列的格式/提供您的數據樣本嗎? – guscht

+2

歡迎來到SO!像這樣的問題真的有益於提供樣本數據(不需要所有數據)以及您已經嘗試過的相關代碼。關鍵是讓我們(作爲潛在的回答者)從您的問題中複製一些文本,在我自己的R會話中運行它,調整代碼或編寫新代碼並作爲答案粘貼回來。對你來說很好的參考資料(請閱讀它們)是[可重現的問題](https://stackoverflow.com/questions/5963269/)和[幫助:最小的,可驗證的例子](https://stackoverflow.com/help/ MCVE)。請閱讀並編輯您的問題,並提供更多信息。 – r2evans

+0

通過將時間序列轉換爲數據框來實現這一點可能會更容易,然後將計算方式轉換爲一年中某天的聚合(整數)(您可以使用'lubridate :: yday'返回日期)。有很多方法可以進行彙總和平均。 – ulfelder

回答

1

像這樣的東西與dplyr + lubridate

library(dplyr) 
library(lubridate) 
df %>% 
    group_by(month = month(date), day = day(date)) %>% 
    summarize(avg_value = mean(value)) %>% 
    pull(avg_value) %>% 
    ts() %>% 
    plot(ylab = "avg_value") 

結果:

> df %>% 
+ group_by(month = month(date), day = day(date)) %>% 
+ summarize(avg_value = mean(value)) 
# A tibble: 366 x 3 
# Groups: month [?] 
    month day avg_value 
    <dbl> <int>  <dbl> 
1  1  1 0.19750444 
2  1  2 0.30492408 
3  1  3 0.16760465 
4  1  4 -0.09357058 
5  1  5 0.10606383 
6  1  6 -0.14456526 
7  1  7 0.23384988 
8  1  8 -0.11987095 
9  1  9 -0.01166687 
10  1 10 -0.08134161 
# ... with 356 more rows 

enter image description here

數據:

df = data.frame(date = seq.Date(as.Date("1970-1-1"), as.Date("2000-12-31"), "days"), 
       value = rnorm(length(seq.Date(as.Date("1970-1-1"), as.Date("2000-12-31"), "days")))) 
+0

不知道爲什麼這是downvoted。如果您認爲此解決方案有問題,請隨時發表評論,以便改進我的答案。 – useR