R:将时间序列拆分为自定义季节
R: Splitting a Time Series into custom seasons
我有一个时间序列 DataFrame:
[https://www.dropbox.com/s/elaxfuvqyip1eq8/SampleDF.csv?dl=0][1]
我的意图是将这个DataFrame按照不同的季节划分:
- 冬季:十二月一月二月
- 季风前:3月4月5月6日(即至6月15日)
- 季风:15Jun Jul Aug Sep(即从 6 月 15 日开始)
- 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")]
}
现在,拆分列表应该包含您需要的所有数据
我有一个时间序列 DataFrame:
[https://www.dropbox.com/s/elaxfuvqyip1eq8/SampleDF.csv?dl=0][1]
我的意图是将这个DataFrame按照不同的季节划分:
- 冬季:十二月一月二月
- 季风前:3月4月5月6日(即至6月15日)
- 季风:15Jun Jul Aug Sep(即从 6 月 15 日开始)
- 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")]
}
现在,拆分列表应该包含您需要的所有数据