Calculating days per month between interval of two dates

浪子不回头ぞ 提交于 2019-12-30 18:55:32

问题


I have a set of events that each have a start and end date, but they take place over the scope of a number of months. I would like to create a table that shows the number of days in each month for this event.

I have the following example.

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

I would expect to get a table out as the following:

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

Does anybody know about a smart and elegant way of doing this or is creating a system of loops the only viable method?

Jochem


回答1:


This is not necessarily efficient because it creates a sequence of days, but it does the job:

> 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

If your time span is so large than this method is slow, you'll have to create a sequence of firsts of the months between your two (truncated) dates, take the diff, and do a little extra work for the end points.




回答2:


As DjSol already pointed out in his comment, you can just subtract two dates to get the number of days:

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)

Is that what you want? I have the feeling that you might have more of a problem to get the start and end date in such a format so you can easily subtract them because you mention a loop. If so, however, I guess we need more details on how your actual data looks.



来源:https://stackoverflow.com/questions/13287798/calculating-days-per-month-between-interval-of-two-dates

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!