用R选择时间序列的三个月

用R选择时间序列的三个月,r,time-series,dplyr,lubridate,R,Time Series,Dplyr,Lubridate,我有一个包含温度数据的每日数据集,希望提取季节平均值。从每日数据中,很容易使用 my.data.winter<-subset(my.data, format.Date(fecha, "%m")=="12" | format.Date(fecha, "%m")=="01" | format.Date(fecha, "%m")=="02") 现在我想得到系列中每个不同年份的冬季平均值。第一次尝试可能是 DATE1<-"1982-12-01" DATE2<-"1983-02-28"

我有一个包含温度数据的每日数据集,希望提取季节平均值。从每日数据中,很容易使用

my.data.winter<-subset(my.data, format.Date(fecha, "%m")=="12" | format.Date(fecha, "%m")=="01" | format.Date(fecha, "%m")=="02")
现在我想得到系列中每个不同年份的冬季平均值。第一次尝试可能是

DATE1<-"1982-12-01"
DATE2<-"1983-02-28"
my.newdata<-subset(my.data.winter, my.data.winter$fecha >  DATE1 &  my.data.winter$fecha <  DATE2 )
要使用此解决方案,我需要构建一个包含DATE1/DATE2的成对值的日期向量或数据框,但我更希望只设置起始值并选择三个月。必须有一个更干净/更聪明的方法。我检查过lubridate,从1982年12月开始计算月数,再加上2个月,我得到14个月,我想得到1983年2月和dplyr,但我不知道如何做到这一点

提前感谢您的帮助

或者您可以使用dplyr:

这给了你:

> x
Source: local data frame [4 x 3]
Groups: season [?]

  season year2       mean
   <chr> <dbl>      <dbl>
1 winter  1982   290.7605
2 winter  1983   290.5127
3 winter  1984   290.9434
4 winter  1985   293.5770

注意:您可以在整个数据集上使用它,它将为您完成所有的子集设置,而不必为您的主数据框创建四个单独的子集

如果您使用的是日期格式,为什么不添加天而不是月呢。然后您可以设置Date2=Date+3*30,然后使用子集。您只是每年进行聚合。不是每个冬季。@Sotos他的问题明确地说,现在我想得到系列中每个不同年份的冬季平均值。我知道,但1982年的冬季介于1982-12-01和1983-02之间-28@Sotos这应该可以解决这个问题。我现在无法检查它,但我将删除否决票
library(dplyr)
x <- my.data.winter %>%

  #add month and year column using lubridate package
  mutate(month = lubridate::month(fecha), year = lubridate::year(fecha))%>%

  #add the seasons for each value
  mutate(season = case_when(.$month == 12 | .$month == 1 | .$month == 2 ~ "winter",
                            .$month == 3 | .$month == 4 | .$month == 5 ~ "spring",
                            .$month == 6 | .$month == 7 | .$month == 8 ~ "summer",
                            .$month == 9 | .$month == 10 | .$month == 11 ~ "fall")) %>%

  #if month is december, classify it as the next year (for aggregation)
  mutate(year2 = ifelse(.$month == 12, year+1, year)) %>%
  group_by(season, year2) %>%
  summarize(mean = mean(V1))
> x
Source: local data frame [4 x 3]
Groups: season [?]

  season year2       mean
   <chr> <dbl>      <dbl>
1 winter  1982   290.7605
2 winter  1983   290.5127
3 winter  1984   290.9434
4 winter  1985   293.5770