如何获得在给定月份结束且具有给定长度的一系列月度日期?假设开始日期是 seq(as.Date(*), length, by="month") ,而不是结束日期,并且AFAIK在这种情况下无法为 by 指定负值 .
seq(as.Date(*), length, by="month")
by
ETA:也就是说,我想要一个跨越给定时间段的序列,但是要指定一个终点而不是起点 . 所以,像 seq(to="2000-03-01", len=3, by="month") --> 2000-01-01, 2000-02-01, 2000-03-01 .
seq(to="2000-03-01", len=3, by="month") --> 2000-01-01, 2000-02-01, 2000-03-01
试试这个:
rev(seq(as.Date("2000-03-01"), length = 3, by = "-1 month")) ## [1] "2000-01-01" "2000-02-01" "2000-03-01"
library(lubridate) ymd('2011-03-03') - months(0:5)
也许你可以将它向前计算,使用 by=month 作为1增量,然后反转:
by=month
R> rev(seq(as.Date("2011-01-01"), length=6, by="month")) [1] "2011-06-01" "2011-05-01" "2011-04-01" "2011-03-01" "2011-02-01" "2011-01-01"
干得好 . 仅基本功能:
last.days.of.month <- function(dt) {ldt<- as.POSIXlt(dt) ldt$mon <- ldt$mon+1 ldt$mday <- 1 return(format( ldt -1, "%Y-%m-%d"))} last.days.of.month(as.Date(c("2010-01-06","2010-03-06", "2010-02-06")) ) # [1] "2010-01-31" "2010-03-31" "2010-02-28" seq.ldom <- function(dt, nmonths) {ldt<- rep(as.POSIXlt(dt)[1], nmonths) ldt$mon <- ldt$mon+seq(1:nmonths) ldt$mday <- 1 return(format( ldt -1, "%Y-%m-%d"))} seq.ldom(as.Date("2010-01-06"), 5) #[1] "2010-01-31" "2010-02-28" "2010-03-31" "2010-04-30" #[5] "2010-05-31"
哦,出于某种原因,我以为你想要这个月的最后几天 . 抱歉无用的代码 . 这个月的头几天并不难 .
seq.fdom <- function(dt, nmonths) {ldt<- rep(as.POSIXlt(dt)[1], nmonths) ldt$mon <- ldt$mon+seq(0:(nmonths-1)) ldt$mday <- 1 return(format( ldt , "%Y-%m-%d"))} seq.fdom(as.Date("2010-01-06"), 5) #[1] "2010-02-01" "2010-03-01" "2010-04-01" "2010-05-01" #[5] "2010-06-01"
前几个月要么:
seq.prior.fdom <- function(dt, nmonths) {ldt<- rep(as.POSIXlt(dt)[1], nmonths) ldt$mon <- ldt$mon-rev(0:(nmonths-1)) ldt$mday <- 1 return(format( ldt , "%Y-%m-%d"))} seq.prior.fdom(as.Date("2010-01-06"), 5) #[1] "2009-09-01" "2009-10-01" "2009-11-01" "2009-12-01" #[5] "2010-01-01"
我认为基本原则是明确的(如果没有用独木舟划桨打死) .
4 回答
试试这个:
也许你可以将它向前计算,使用
by=month
作为1增量,然后反转:干得好 . 仅基本功能:
哦,出于某种原因,我以为你想要这个月的最后几天 . 抱歉无用的代码 . 这个月的头几天并不难 .
前几个月要么:
我认为基本原则是明确的(如果没有用独木舟划桨打死) .