R每日多年平均值

时间:2017-10-16 15:27:46

标签: r

我需要一些R时间序列的帮助。我每天的温度值为30年= 365 * 30天= 10950天(如果不考虑最小的年份)。我想创建一个"每日气候学",即平均值 每个(30个值)1月1日,1月2日等等,用365值创建一个时间段。任何人都可以帮我解决这个话题吗?提前谢谢。

2 个答案:

答案 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

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"))))

答案 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') 

这个答案有点晚了,但是也许对别人有帮助!