Skip to content

Looking for a special date function in R

8 messages · Sergey Goriatchev, Brian Ripley, Gabor Grothendieck

#
Hello, everyone

I wonder if R has something similar to Excel function
EDATE(start_date; months) which returns a serial number of the date
that is the indicated number of months before of after the start date.
Example (the second column EDATE(first_column; -6)):
01.01.1999	01.07.1998
02.02.1999	02.08.1998
06.03.1999	06.09.1998

I am working with a zoo object where the row names are dates and for
particular rows I need to find values that were recorded 6 months
before (or return NA if the date is before the timeseries start).

Maybe someone knows a passable R function for that kind of operation?

Thanks in advance for help!

Best,
Sergey
#
See ?julian
[1] 10
attr(,"origin")
[1] "2009-01-11"

and R News 4/1.
On Wed, Jan 21, 2009 at 4:37 AM, Sergey Goriatchev <sergeyg at gmail.com> wrote:
#
Dear Gabor,

Thanks for that!
Still, it is not really similar to how EDATE works.
With julian(Sys.Date(), Sys.Date() - 10)  one moves 10 days back.
The problem is that I need to move by months, not by days, as months
have different number of days.
I need to come to the same day when I move backward or forward in
time, for example going back one month from today (21.01.2009) I need
to come to 21.12.2008.
I've read through your article in RNews 4/1 but still do not know how
to do what I need to do.

Regards,
Sergey

On Wed, Jan 21, 2009 at 10:44, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote:

  
    
#
On Wed, 21 Jan 2009, Sergey Goriatchev wrote:

            
The trick is to use the POSIXlt class.  E.g.
[1] "2008-07-21"

Now, the issue is what date is 6 months before 2008-08-31, and I'll 
leave you to ponder what that means.

  
    
#
Dear Prof. Ripley,

Thank you for help.
Yes, that is an interesting question you pose. I already thought
myself how February should be handled, as EDATE(31.08.2008; -6)
returns 29.02.2008.
In Excel it is not a problem, since this nonexisting date is then used
in VLOOKUP function where one can have Range.Lookup argument set to
TRUE and then it finds the closest value.
Example from Excel (value for 29.02.2008 is recovered from the sorted
table with VLOOKUP function):


21.07.2008	10.00
31.08.2008	20.00
28.02.2008	30.00
01.03.2008	40.00
02.03.2008	50.00
03.03.2008	60.00

29.02.2008	30

I wonder if that kind of functionality is available in R, or one has
to write a piece of code oneself to acheive it.

Thank you for your time and help!

Regards,
Sergey
On Wed, Jan 21, 2009 at 12:44, Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote:

  
    
#
On Wed, 21 Jan 2009, Sergey Goriatchev wrote:

            
Easy to do in the same way as I showed you.

  
    
#
This will give you 6 months after today.  Use negative
numbers to move backwards:
[1] "2009-07-21"
On Wed, Jan 21, 2009 at 6:27 AM, Sergey Goriatchev <sergeyg at gmail.com> wrote:
#
Thank you all for your help!

Sergey

On Wed, Jan 21, 2009 at 13:25, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote: