我有一個時間序列資料框:
[https://www.dropbox.com/s/elaxfuvqyip1eq8/SampleDF.csv?dl=0][1]
我的意圖是根據以下情況將此 DataFrame 劃分為不同的季節:
- 冬季: 十二月 一月 二月
- 季風前:3 月 4 月 5 月 6 月 15 日(即到 6 月 15 日)
- 季風:15Jun Jul Aug Sep(即從 6 月 15 日開始)
- 季風過后:10 月 11 月
我嘗試使用openair包功能
selectByDate()
但還沒有運氣。作為 R 的新手。任何幫助將不勝感激。
謝謝!
uj5u.com熱心網友回復:
請參閱lubridate使使用日期/時間更容易的包。
對于您的問題,我想您可以使用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")]
}
現在,拆分串列應該包含您需要的所有資料
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/436874.html
