2015-11-22 24 views
0

我试图创建一个让全2个月之间的月份成列表的功能,两个日期之间的所有月份:如何列出R中

date1<- 201305 
date2<- 201511 

months <- function(date1,date2){} 

而且我希望它返回一个像这样的列表:

201305 
201306 
201307 
... 
201509 
201510 
201511 
+0

..然后发生了什么事?请[编辑]你的问题,并显示你有多远。 – usr2564301

+0

相关:[将年和月(“yyyy-mm”格式)转换为R中的日期](http://stackoverflow.com/questions/6242955/converting-year-and-month-to-a-date- in-r) – smci

回答

5

首先,我们需要创建日期。你提供什么还没有一个日期,因为它错过了一天 - 所以我们加一个:

R> d1 <- as.Date(paste0("201305","01"), "%Y%m%d") 
R> d2 <- as.Date(paste0("201511","01"), "%Y%m%d") 

给定两个日期,得到的日期序列很简单:到seq()通话。同样平凡的方式来格式化你想要的:

R> dat <- format(seq(d1,d2,by="month"), "%Y%m") 

我们检查的开始和结束:

R> head(dat) 
[1] "201305" "201306" "201307" "201308" "201309" "201310" 
R> tail(dat) 
[1] "201506" "201507" "201508" "201509" "201510" "201511" 
R> 

现在,作为一个功能:

datseq <- function(t1, t2) { 
    format(seq(as.Date(paste0(t1,"01"), "%Y%m%d"), 
       as.Date(paste0(t2,"01"), "%Y%m%d"),by="month"), 
      "%Y%m") 
} 
+0

感谢您的编辑。正如你可能猜到的那样,这个函数没有经过测试: -/ –

+0

我是R新手,所以这个错误实际上帮助我更好地学习seq()。 –

2

这可以用做yearmon动物园包中的课程:

library(zoo) 

ym1 <- as.yearmon(as.character(date1), "%Y%m") # convert to yearmon 
ym2 <- as.yearmon(as.character(date2), "%Y%m") # ditto 
s <- seq(ym1, ym2, 1/12) # create yearmon sequence 
as.numeric(format(s, "%Y%m")) # convert to numeric yyyymm 

捐赠:

[1] 201305 201306 201307 201308 201309 201310 201311 201312 201401 201402 
[11] 201403 201404 201405 201406 201407 201408 201409 201410 201411 201412 
[21] 201501 201502 201503 201504 201505 201506 201507 201508 201509 201510 
[31] 201511 

,或者你可能更愿意使用s这是一个yearmon类变量,它看起来是这样,但种类正确,可以在绘图中使用:

> s 
[1] "May 2013" "Jun 2013" "Jul 2013" "Aug 2013" "Sep 2013" "Oct 2013" 
[7] "Nov 2013" "Dec 2013" "Jan 2014" "Feb 2014" "Mar 2014" "Apr 2014" 
[13] "May 2014" "Jun 2014" "Jul 2014" "Aug 2014" "Sep 2014" "Oct 2014" 
[19] "Nov 2014" "Dec 2014" "Jan 2015" "Feb 2015" "Mar 2015" "Apr 2015" 
[25] "May 2015" "Jun 2015" "Jul 2015" "Aug 2015" "Sep 2015" "Oct 2015" 
[31] "Nov 2015" 

例如这工作:

plot(seq(31) ~ s) 
+0

非常感谢。总是善于学习更多。 –