[R] Adding to the years ...

Gabor Grothendieck ggrothendieck at gmail.com
Tue Nov 24 03:42:40 CET 2009


There is some question of what should be returned if its Feb 29th and
in 6 years Feb only has 28 days; however, that aside
try this which does not involve any internals and works for both Date
and chron dates:

> y6 <- function(x) {
+ for(i in seq_along(x)) x[i] <- tail(seq(x[i], len = 7, by = "year"), 1)
+ x
+ }
>
> x <- as.Date("2000-02-28") + 0:2
> y6(x)
[1] "2006-02-28" "2006-03-01" "2006-03-01"
>
> library(chron)
> x <- as.chron("2000-02-28") + 0:2
> y6(x)
[1] 02/28/06 02/28/06 03/01/06


On Mon, Nov 23, 2009 at 9:06 PM, Rolf Turner <r.turner at auckland.ac.nz> wrote:
>
> I have a character vector of dates, comme ci:
>
>  > irving
>  [1] "12/05/1987" "11/07/1986" "08/29/1987" "01/26/1988" "06/21/1988"
>  [6] "03/17/1987" "02/24/1988" "10/04/1986" "03/19/1987" "01/02/1987"
>
> For reasons best known to myself ( ;-) ) I want to add six years to the
> year in each of these dates.
>
> After reading TFM about POSIXct and POSIXlt objects I figured out that I
> could do:
>
>        clyde <- as.POSIXlt(irving,format="%m/%d/%Y")
>        clyde$year <- clyde$year + 6
>        melvin <- format(clyde,"%m/%d/%Y")
>
> This seems to me however to be a bit of a kludge.  Is there a way of
> converting a character vector of dates to a POSIXlt/POSIXct/Date/whatever
> object and then adding 6 years to the latter object in a straightforward
> way, without having to delve into components of the object?
>
> Ta.
>
>        cheers,
>
>                Rolf Turner
>
> ######################################################################
> Attention:\ This e-mail message is privileged and confid...{{dropped:9}}
>
> ______________________________________________
> R-help at 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.
>




More information about the R-help mailing list