我需要一些R时间序列的帮助。我每天的温度值为30年= 365 * 30天= 10950天(如果不考虑最小的年份)。我想创建一个"每日气候学",即平均值 每个(30个值)1月1日,1月2日等等,用365值创建一个时间段。任何人都可以帮我解决这个话题吗?提前谢谢。
答案 0 :(得分: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
数据:强>
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"))))
答案 1 :(得分:0)
我有同样的问题要解决,并在这里找到了答案: Daily average calculation from multiple year daily weather data?
由于没有直接的代码,我花了一些时间来理解和重新排列所有注释。
因此,在此我根据上面的链接给出一个完整的示例。
例如3年的随机降水和温度数据:
test_data <- data.frame("date"= seq(from = as.Date("1990/1/1"), to = as.Date("1992/12/31"), by = "day"),"prec" =runif(1096, 0, 10),"temp" = runif(1096, 0, 10))
下一步是添加带有变量的新列,该变量将基于该列计算平均值。在此示例中的一天:
test_data$day <- format(test_data$date, format='%m-%d')
由于3年,一年中每天出现3次。这样我们就可以计算每天的平均值:
test_data_daily_mean <- aggregate(cbind(prec, temp) ~ (day), data=test_data, FUN=mean)
提示:对于此解决方案,日期列实际上必须在其中包含日期。否则,您必须将其格式化为R日期,如下所示:
as.Date(data$date, format='%d-%m-%Y')
这个答案有点晚了,但是也许对别人有帮助!