Dan*_*Dan 1 r time-series lapply zoo xts
这很令人尴尬:我承认我的几段代码与此类似:
Arghhhh!真正的程序员在看到类似的东西时会畏缩吗?
这个数字应该是不言自明的:我需要一个名为Season的变量,它根据WEATHERDATE列返回ID"(year-1)_(year)".
因此,日期从"1998-06-15"到"1999-06-14"的任何行都应在Season ID列下返回"1998-1999" .
WEATHERDATE列仅从1998-01-01运行到TODAY.
我打赌这有一个/两个班轮解决方案.我试过动物园包但没有成功.
任何R向导都指向我在这里缺少的明显解决方案?
***可重复的例子:
WEATHERDATE <- seq(as.Date("1998-01-01"), len=99999, by=1)
VARIABLE <- rnorm(n = length(WEATHERDATE))
data_mex <- data.frame(WEATHERDATE, VARIABLE)
## how to create SEASON based on dates??
# I would then run the code block from above, something like:
data_mex <- within(data_mex, Season[DATEWEATHER >= ymd(StartOfSeason)+365*0 & DATEWEATHER < ymd(StartOfSeason)+365*1 ] <- "1998-1999")
Run Code Online (Sandbox Code Playgroud)
当然,我不需要每年回来并触摸代码的解决方案将是理想的:)
您可以在基数R中使用cut.Date和seq.Date执行此操作:
seasons <- format(as.Date(cut.Date(as.Date(data_mex$WEATHERDATE),
breaks=seq.Date(as.Date("1997-06-15"),
as.Date("2280-06-15", "year"))), "%Y")
data_mex$seasons <- paste0(seasons, "-", as.numeric(seasons) + 1)
Run Code Online (Sandbox Code Playgroud)
注意我已经将您用作"2280-06-15"季节的最新日期,但您可能希望将其替换Sys.Date()为适合您的任务或适合您的任务.
返回:
> head(data_mex)
WEATHERDATE VARIABLE seasons
1 1998-01-01 -0.2260734 1997-1998
2 1998-01-02 0.3222805 1997-1998
3 1998-01-03 -0.1554167 1997-1998
4 1998-01-04 -0.5591154 1997-1998
5 1998-01-05 1.0729737 1997-1998
6 1998-01-06 1.0030025 1997-1998
> tail(data_mex)
WEATHERDATE VARIABLE seasons
99994 2271-10-10 0.59986466 2271-2272
99995 2271-10-11 0.37304603 2271-2272
99996 2271-10-12 1.30822156 2271-2272
99997 2271-10-13 0.01204986 2271-2272
99998 2271-10-14 0.87340544 2271-2272
99999 2271-10-15 0.44098083 2271-2272
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |