我有来自Yahoo Finance的数据,我想查找3个月前的仅子集数据,然后在6个月前进行同样的操作。我的DF是:
getSymbols("^IRX", from="2019-01-02")
最简单的解决方案是从今天开始使用-90和-180进行子集化。
Df.3m <- IRX[paste(Sys.Date()-90,"::", sep="")]
Df.6m <- IRX[paste(Sys.Date()-180,"::", sep="")]
但是问题是3个月的某个时间会增加一两天(或更短)。是否有一个软件包可以找到3个月前的确切日期,以便我可以将其用作子集?
答案 0 :(得分:2)
您可以使用lubridate软件包获取抵消日期:
library(lubridate)
dt <- Sys.Date() %m-% months(3)
Df.3m <- IRX[paste0(dt,"::")]
答案 1 :(得分:0)
我最终创建了一个似乎有效的快速功能:
Find.Date.x.month.ago <- function(current_date, x){
Current.month <- month(current_date)
Past.x.month <- Current.month - x
if(Past.x.month < 0){
Past.x.month <- 12 + Past.x.month
}
trgt.day <- day(current_date)
while (is.na(lubridate::ymd(paste(year(current_date), Past.x.month, trgt.day, sep="-"))) == TRUE) {
trgt.day <- trgt.day - 1
}
return(lubridate::ymd(paste(year(current_date), Past.x.month, trgt.day, sep="-")))
}
尝试在5月30日进行确认是否可以处理2月的问题:
test.date <- "2019-05-30"
> suppressWarnings(Find.Date.x.month.ago(test.date, 3))
[1] "2019-02-28"
> suppressWarnings(Find.Date.x.month.ago(test.date, 6))
[1] "2019-11-30"