-3
我需要一些R时间序列的帮助。我每天的温度值为30年= 365 * 30天= 10950天(如果不考虑最低年限)。我想创建一个“日常气候学”,即1月1日,1月2日的每个平均值(30个值),以创建365个值的时间表。任何人都可以帮助我解决这个问题吗?提前致谢。R每日多年平均值
我需要一些R时间序列的帮助。我每天的温度值为30年= 365 * 30天= 10950天(如果不考虑最低年限)。我想创建一个“日常气候学”,即1月1日,1月2日的每个平均值(30个值),以创建365个值的时间表。任何人都可以帮助我解决这个问题吗?提前致谢。R每日多年平均值
像这样的东西与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
数据:
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"))))
不知道为什么这是downvoted。如果您认为此解决方案有问题,请随时发表评论,以便改进我的答案。 – useR
您可以显示日期列的格式/提供您的数据样本吗? – guscht
欢迎来到SO!像这样的问题真的有益于提供样本数据(不需要所有数据)以及您已经尝试过的相关代码。关键是让我们(作为潜在的回答者)从您的问题中复制一些文本,在我自己的R会话中运行它,调整代码或编写新代码并作为答案粘贴回来。对你来说很好的参考资料(请阅读它们)是[可重现的问题](https://stackoverflow.com/questions/5963269/)和[帮助:最小的,可验证的例子](https://stackoverflow.com/help/ MCVE)。请阅读并编辑您的问题,并提供更多信息。 – r2evans
通过将时间序列转换为数据框来实现这一点可能会更容易,然后将计算方式转换为一年中某天的聚合(整数)(您可以使用'lubridate :: yday'返回日期)。有很多方法可以进行汇总和平均。 – ulfelder