as.Date()
有一个有用的功能,它可以提供最后n
天,例如:
dt <- Sys.Date()-6
> dt
[1] "2015-09-25"
有没有办法告诉它过去六个月而不是过去六天?
我需要比6*30
更精确的东西,因为它应该是这个月的最后一天。
答案 0 :(得分:3)
您不能仅使用Sys.Date
来执行此操作,但有一些方法。以下内容将为您提供正确的月份,但不是正确的日期(即该月的最后一天):
#Sys.Date will return 2015-10-01 today
dates <- seq( Sys.Date() - months(6), Sys.Date(), '1 month')
dates
[1] "2015-04-01" "2015-05-01" "2015-06-01" "2015-07-01" "2015-08-01" "2015-09-01" "2015-10-01"
但是,我在R-bloggers上找到了this非常好的博客,它定义了这个功能(我稍微修改了它与Dates一起工作),它返回了当月的最后一天:
eom <- function(date) {
# date character string containing POSIXct date
date.lt <- as.POSIXlt(dates) # add a month, then subtract a day:
mon <- date.lt$mon + 2
year <- date.lt$year
year <- year + as.integer(mon==13) # if month was December add a year
mon[mon==13] <- 1
iso = ISOdate(1900+year, mon, 1, hour=0, tz='')
result = as.POSIXct(iso) - 86400 # subtract one day
result + (as.POSIXlt(iso)$isdst - as.POSIXlt(result)$isdst)*3600
}
现在正在运行:
> eom(dates)
[1] "2015-04-30 BST" "2015-05-31 BST" "2015-06-30 BST" "2015-07-31 BST" "2015-08-31 BST" "2015-09-30 BST" "2015-10-31 GMT"
返回正确的结果。
答案 1 :(得分:2)
这就是你要找的东西吗?
today = Sys.Date()
lastSixMonths = seq(today, length.out=6, by="-1 month")
print(lastSixMonths)
# [1] "2015-10-01" "2015-09-01" "2015-08-01" "2015-07-01" "2015-06-01"
# [6] "2015-05-01"