2017-10-16 114 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