R:将时间序列拆分为自定义季节

R: Splitting a Time Series into custom seasons

我有一个时间序列 DataFrame:

[https://www.dropbox.com/s/elaxfuvqyip1eq8/SampleDF.csv?dl=0][1]

我的意图是将这个DataFrame按照不同的季节划分:

  1. 冬季:十二月一月二月
  2. 季风前:3月4月5月6日(即至6月15日)
  3. 季风:15Jun Jul Aug Sep(即从 6 月 15 日开始)
  4. Post-季风:10 月 11 月

我尝试使用 openair 包函数

selectByDate()

但还没有运气。 作为 R 的新手。 任何帮助将不胜感激。

谢谢!

请参阅 lubridate 包,它使 date/time 的工作更容易一些。

对于你的问题,我想你可以使用sapply:

df["season"] = sapply(df["date"], assign_season)

其中,assign_season:

assign_season <- function(date){
    # return a season based on date 

}

一旦有了季节,就可以轻松划分数据帧了:

winter = subset(df, season == "winter")
# and so on

抱歉,我现在要赶时间,但如果其他人还没有回答,可以回来完成这个。

编辑:

因此,R 确实有一个内置函数 cut,它可以处理日期并根据日期范围拆分向量。

对于您的数据,我是这样做的:

library(lubridate)
library(dplyr)

df = read.csv('SampleDF.csv')

## reformat date into POSIXct
df <- df %>%
         mutate(date_reformat = as.POSIXct(date(mdy_hm(date))))

## define breaks & labels
breaks = c("2014-12-01", "2015-03-01", "2015-06-15", "2015-10-01", "2015-12-01", "2016-03-01", "2016-06-15", "2016-10-01", "2016-12-01", "2017-03-01")
labels = c("winter", "pre_monsoon", "monsoon", "post_monsoon", "winter", "pre_monsoon", "monsoon", "post_monsoon", "winter")
df["season"] = cut(df$date_reformat, breaks=as.POSIXct(breaks), labels=labels)

splits = list()

for (s in c("winter", "pre_monsoon", "monsoon", "post_monsoon")){
  splits[[s]] = subset(df, season == s)[c("date", "value")]
}

现在,拆分列表应该包含您需要的所有数据