2016-05-06 17 views
0

Ich habe zwei Zoo-Zeitreihen mit den gleichen Parametern für einen Bereich, aber von verschiedenen Plattformen. Diese beiden Zeitreihen haben eine leichte Verschiebung in den Zahlen, auch wenn ihre individuellen Trends korrekt sind und sich überschneiden. Ich möchte beide Zeitreihen zu einer fortlaufenden Serie verschmelzen lassen, indem ich die Fehler in beiden Serien mit den Daten für die überlappenden Daten korrigiere. Wie mache ich das bitte? Ich habe unten einige Beispieldaten hinzugefügt.Verschmelzen und anpassen zwei überlappende Zeitreihen in R

library(ggplot2) 
library(gtable) 
library(grid) 
library(zoo) 
library(reshape) 
library(reshape2) 
##Create zoo objects 
x<-as.zoo(as.matrix(cbind(a=1:8,b=2:9))) 
y<-as.zoo(as.matrix(cbind(a=2:9,b=3:10))) 
##Create dates 
CCnb1<-seq(from=as.Date("2004-01-01"),to=as.Date("2004-08-01"),by="1 months") 
CCnb2<-seq(from=as.Date("2004-06-01"),to=as.Date("2005-01-01"),by="1 months") 
##Index appropriately 
index(x)<-CCnb1 
index(y)<-CCnb2 
####Create dataframes 
x1<-as.data.frame(x) 
y1<-as.data.frame(y) 
##Add date columns 
x1$Date=CCnb1 
y1$Date=CCnb2 
##Melt data frames 
x2<-melt(x1, id.vars="Date") 
y2<-melt(y1, id.vars="Date") 

Ich habe ein Pseudo-Plot mit ggplot2 aufgenommen, wie die Linien aussehen könnten. Meine tatsächlichen Zeitreihen sind viel länger und die Verschiebung der Werte ist nicht so schlimm wie dieses Beispiel.

#Plot 
NT<-ggplot(x2, aes(x=Date, y=value,colour=variable, group=variable)) + 
theme_bw()+ geom_line(size=0.5,colour="grey30") 
NTb<-NT + geom_line(data=y2,aes(x=Date, y=value,group=variable)) 
NTb+facet_wrap(~variable) 

PLot showing the time series above

Antwort

1

Der Unterschied ist konstant:

> y$a - x$a 
2004-06-01 2004-07-01 2004-08-01 
     -4   -4   -4 
> y$b - x$b 
2004-06-01 2004-07-01 2004-08-01 
     -4   -4   -4 

so vorausgesetzt, dass x$a zu y$a eingestellt werden soll, und für simliarly x$b und y$b:

va <- apply(merge(x$a + coredata(y$a - x$a)[1], y$a), 1, mean, na.rm = TRUE) 
a <- zoo(va, as.Date(names(va))) 


vb <- apply(merge(x$b + coredata(y$b - x$b)[1], y$b), 1, mean, na.rm = TRUE) 
b <- zoo(vb, as.Date(names(vb))) 

merge(a, b) 

g iiving:

  a b 
2004-01-01 -3 -2 
2004-02-01 -2 -1 
2004-03-01 -1 0 
2004-04-01 0 1 
2004-05-01 1 2 
2004-06-01 2 3 
2004-07-01 3 4 
2004-08-01 4 5 
2004-09-01 5 6 
2004-10-01 6 7 
2004-11-01 7 8 
2004-12-01 8 9 
2005-01-01 9 10 
+0

Danke @ G.Grothendeick. Das hat perfekt funktioniert. –