[R] Data frame reordering to time series
Gabor Grothendieck
ggrothendieck at gmail.com
Sun Aug 8 17:55:43 CEST 2010
On Sun, Aug 8, 2010 at 11:21 AM, steven mosher <moshersteven at gmail.com> wrote:
> Ok,
> I'm a bit confused by what you mean by "regularly spaced"
> After I do the do.call I do get a data structure with all the times present
> and every time has a NA or a data value.
> Steve
>
regularly spaced means that every observation is one month later than
the prior. If there are missing 6 month chunks or missing entire
years then the observations are not regularly spaced since there are
some months not present.
It works for me:
> Id<-c(rep(67543,4),rep(12345,3),rep(89765,5))
> Years<-c(seq(1989,1992,by =1),1991,1993,1994,seq(1991,1995,by=1))
> Values2<-c(12,NA,34,21,NA,65,23,NA,13,NA,13,14)
> Values<-c(12,14,34,21,54,65,23,12,13,13,13,14)
> Data<-data.frame(Index=Id,Year=Years,Jan=Values,Feb=Values/2,Mar=Values2,Apr=Values2,Jun=Values,July=Values/3,Aug=Values2,Sep=Values,
+ Oct=Values,Nov=Values,Dec=Values2)
>
> library(zoo)
> f <- function(x) {
+ dat <- x[-(1:2)]
+ tim <- as.yearmon(outer(x$Year, seq(0, length = ncol(dat))/12, "+"))
+ zoo(c(as.matrix(dat)), tim)
+ }
> do.call(cbind, by(Data, Data$Index, f))
X12345 X67543 X89765
Jan 1989 NA 12.000000 NA
Feb 1989 NA 6.000000 NA
Mar 1989 NA 12.000000 NA
Apr 1989 NA 12.000000 NA
May 1989 NA 12.000000 NA
Jun 1989 NA 4.000000 NA
Jul 1989 NA 12.000000 NA
Aug 1989 NA 12.000000 NA
Sep 1989 NA 12.000000 NA
Oct 1989 NA 12.000000 NA
Nov 1989 NA 12.000000 NA
Jan 1990 NA 14.000000 NA
Feb 1990 NA 7.000000 NA
Mar 1990 NA NA NA
Apr 1990 NA NA NA
May 1990 NA 14.000000 NA
Jun 1990 NA 4.666667 NA
Jul 1990 NA NA NA
Aug 1990 NA 14.000000 NA
Sep 1990 NA 14.000000 NA
Oct 1990 NA 14.000000 NA
Nov 1990 NA NA NA
Jan 1991 54.000000 34.000000 12.000000
Feb 1991 27.000000 17.000000 6.000000
Mar 1991 NA 34.000000 NA
Apr 1991 NA 34.000000 NA
May 1991 54.000000 34.000000 12.000000
Jun 1991 18.000000 11.333333 4.000000
Jul 1991 NA 34.000000 NA
Aug 1991 54.000000 34.000000 12.000000
Sep 1991 54.000000 34.000000 12.000000
Oct 1991 54.000000 34.000000 12.000000
Nov 1991 NA 34.000000 NA
Jan 1992 NA 21.000000 13.000000
Feb 1992 NA 10.500000 6.500000
Mar 1992 NA 21.000000 13.000000
Apr 1992 NA 21.000000 13.000000
May 1992 NA 21.000000 13.000000
Jun 1992 NA 7.000000 4.333333
Jul 1992 NA 21.000000 13.000000
Aug 1992 NA 21.000000 13.000000
Sep 1992 NA 21.000000 13.000000
Oct 1992 NA 21.000000 13.000000
Nov 1992 NA 21.000000 13.000000
Jan 1993 65.000000 NA 13.000000
Feb 1993 32.500000 NA 6.500000
Mar 1993 65.000000 NA NA
Apr 1993 65.000000 NA NA
May 1993 65.000000 NA 13.000000
Jun 1993 21.666667 NA 4.333333
Jul 1993 65.000000 NA NA
Aug 1993 65.000000 NA 13.000000
Sep 1993 65.000000 NA 13.000000
Oct 1993 65.000000 NA 13.000000
Nov 1993 65.000000 NA NA
Jan 1994 23.000000 NA 13.000000
Feb 1994 11.500000 NA 6.500000
Mar 1994 23.000000 NA 13.000000
Apr 1994 23.000000 NA 13.000000
May 1994 23.000000 NA 13.000000
Jun 1994 7.666667 NA 4.333333
Jul 1994 23.000000 NA 13.000000
Aug 1994 23.000000 NA 13.000000
Sep 1994 23.000000 NA 13.000000
Oct 1994 23.000000 NA 13.000000
Nov 1994 23.000000 NA 13.000000
Jan 1995 NA NA 14.000000
Feb 1995 NA NA 7.000000
Mar 1995 NA NA 14.000000
Apr 1995 NA NA 14.000000
May 1995 NA NA 14.000000
Jun 1995 NA NA 4.666667
Jul 1995 NA NA 14.000000
Aug 1995 NA NA 14.000000
Sep 1995 NA NA 14.000000
Oct 1995 NA NA 14.000000
Nov 1995 NA NA 14.000000
More information about the R-help
mailing list