Here is another way:

> date <-
+ 
c("9/22/2011","9/23/2011","9/26/2011","9/27/2011","9/28/2011","9/29/2011","9/30/2011","10/17/2011",
+ 
"10/18/2011","10/19/2011","10/20/2011","10/21/2011","10/24/2011","10/25/2011","10/26/2011","11/17/2011","11/18/2011","11/21/2011","11/22/2011","11/23/2011","11/25/2011","11/28/2011","11/29/2011","11/30/2011",
+ 
"12/9/2011","12/12/2011","12/13/2011","12/14/2011","12/15/2011","12/16/2011","12/19/2011","12/20/2011","12/21/2011","12/22/2011")
> x.input <- as.POSIXlt(date, format = '%m/%d/%Y', tz = "GMT")
> x <- x.input  # make a copy
> # force to the first day of the month
> x$mday <- 1L
> # now get last day of previous month
> x <- x - 24 * 3600  # subtract 24 hours (in seconds)
> data.frame(today = x.input, last = x)
        today       last
1  2011-09-22 2011-08-31
2  2011-09-23 2011-08-31
3  2011-09-26 2011-08-31
4  2011-09-27 2011-08-31
5  2011-09-28 2011-08-31
6  2011-09-29 2011-08-31
7  2011-09-30 2011-08-31
8  2011-10-17 2011-09-30
9  2011-10-18 2011-09-30
10 2011-10-19 2011-09-30
11 2011-10-20 2011-09-30
12 2011-10-21 2011-09-30
13 2011-10-24 2011-09-30
14 2011-10-25 2011-09-30


On Sat, Jan 21, 2012 at 5:21 PM, Gabor Grothendieck
<ggrothendi...@gmail.com> wrote:
> On Sat, Jan 21, 2012 at 5:20 PM, Gabor Grothendieck
> <ggrothendi...@gmail.com> wrote:
>> On Fri, Jan 20, 2012 at 12:12 PM, cameron <raymond...@invesco.com> wrote:
>>> Can anyone please help me with this?
>>> I have a list of business dates.  What I want is to have last day of last
>>> month and paste them on next month.
>>>
>>> What i have                        What i want
>>> 5725 2011-09-22
>>> 5726 2011-09-23
>>> 5727 2011-09-26
>>> 5728 2011-09-27
>>> 5729 2011-09-28
>>> 5730 2011-09-29
>>> 5731 2011-09-30
>>> 5742 2011-10-17                 2011-09-30
>>> 5743 2011-10-18                 2011-09-30
>>> 5744 2011-10-19                 2011-09-30
>>> 5745 2011-10-20                 2011-09-30
>>> 5746 2011-10-21                 2011-09-30
>>> 5747 2011-10-24                 2011-09-30
>>> 5748 2011-10-25                 2011-09-30
>>> *5749 2011-10-26*                 2011-09-30
>>> 5765 2011-11-17                 2011-10-26
>>> 5766 2011-11-18                 2011-10-26
>>> 5767 2011-11-21                 2011-10-26
>>> 5768 2011-11-22                 2011-10-26
>>> 5769 2011-11-23                 2011-10-26
>>> 5770 2011-11-25                 2011-10-26
>>> 5771 2011-11-28                 2011-10-26
>>> 5772 2011-11-29                 2011-10-26
>>> *5773 2011-11-30*                 2011-10-26
>>> 5780 2011-12-09                 2011-11-30
>>> 5781 2011-12-12                 2011-11-30
>>> 5782 2011-12-13                 2011-11-30
>>> 5783 2011-12-14                 2011-11-30
>>> 5784 2011-12-15                 2011-11-30
>>> 5785 2011-12-16                 2011-11-30
>>> 5786 2011-12-19                 2011-11-30
>>> 5787 2011-12-20                 2011-11-30
>>> 5788 2011-12-21                 2011-11-30
>>> 5789 2011-12-22                 2011-11-30
>>>
>>> date <-
>>> c("9/22/2011","9/23/2011","9/26/2011","9/27/2011","9/28/2011","9/29/2011","9/30/2011","10/17/2011",
>>> "10/18/2011","10/19/2011","10/20/2011","10/21/2011","10/24/2011","10/25/2011","10/26/2011","11/17/2011","11/18/2011","11/21/2011","11/22/2011","11/23/2011","11/25/2011","11/28/2011","11/29/2011","11/30/2011",
>>> "12/9/2011","12/12/2011","12/13/2011","12/14/2011","12/15/2011","12/16/2011","12/19/2011","12/20/2011","12/21/2011","12/22/2011")
>>>
>>
>> Try this.  It only uses plain R.  f inputs a "Date" class date and
>> returns the index in dt which contains the last date in the prior
>> month (or NA if none) assuming that dt is sorted:
>>
>> dt <- as.Date(date, "%m/%d/%Y")
>>
>> ym <- format(dt, "%Y %m")
>> f <- function(x) tail(c(NA, which(ym < x)), 1)
>> dt[sapply(ym, f)]
>
> Just one correction.  f takes a ym-style string, not a Date.
>
> --
> Statistics & Software Consulting
> GKX Group, GKX Associates Inc.
> tel: 1-877-GKX-GROUP
> email: ggrothendieck at gmail.com
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to