2012-11-08 68 views
5

我有一组事件,每个事件都有一个开始日期和结束日期,但它们发生在几个月的范围内。我想创建一个表格,显示该事件每个月的天数。计算两个日期间隔期间每月的天数

我有下面的例子。

event_start_date <- as.Date("23/10/2012", "%d/%m/%Y") 
event_end_date <- as.Date("07/02/2013", "%d/%m/%Y") 

我希望得到一个表出来,如下所示:

Oct-12 8 
Nov-12 30 
Dec-12 31 
Jan-13 31 
Feb-13 7 

有谁知道这样做的聪明,优雅的方式或者是创建循环的系统,唯一可行的方法是什么?

Jochem

+1

我想你可以只减去日期见http://stackoverflow.com/questions/2254986/how-to-subtract-days-in-r – DjSol

回答

6

这不一定是有效的,因为它创建天的序列,但它的工作:

> library(zoo) 
> table(as.yearmon(seq(event_start_date, event_end_date, "day"))) 

Oct 2012 Nov 2012 Dec 2012 Jan 2013 Feb 2013 
     9  30  31  31  7 

如果你的时间跨度如此之大,比这种方法是缓慢的,你必须创建一个在两个(截短的)日期之间的月份中的第一个序列,采取diff,并为端点做一些额外的工作。

1

正如DjSol已经在他的评论中指出的那样,你可以减去两个日期得到的天数:

event_start_date <- as.Date("23/10/2012", "%d/%m/%Y") 
event_end_date <- as.Date("07/02/2013", "%d/%m/%Y") 
as.numeric(event_end_date - event_start_date) 

这是你想要的吗?我觉得你可能有更多的问题以这种格式获得开始和结束日期,所以你可以很容易地减去它们,因为你提到了一个循环。但是,如果是这样,我想我们需要更多关于实际数据外观的细节。

+0

谢谢DjSol和Christoph_J,我知道这个概念,但我特别感兴趣的是将分配的日子分配到如表中所示的月份。当然,这可以通过循环和month_end - month_start来完成。但我想知道是否有一个更优雅的方法来完成这一点? – Jochem

+0

我的不好!现在我意识到你想要做什么。但是flodel的答案似乎是一个很好的起点。 –

相关问题