2016-04-23 30 views
0

Ich bin wirklich neu hier und ich bin wirklich neu in Programmiersprache wie R. Ich möchte 3 Zeitreihen herunterladen, wählen Sie 2 Spalten (Termine und Schlusskurs) von jedem von ihnen und dann fusionieren sie zu einem. Zusammenführen von ihnen ist mein Problem - einige Daten wie hier kopiert:Wie kann ich 3 Zeitreihen in R zusammenführen?

http://prntscr.com/avz7o6.jpg

Ich versuchte merge.xts() anstelle von merge() und wechseln .xts in data.frame zu verwenden, aber es funktioniert nicht Arbeit.

Mein Code:

#install packages quantmod i Quandl 
install.packages(c("quantmod","Quandl")) 
library('quantmod') 
library('Quandl') 

#download data (.xts) using Quandl 
Wine<-Quandl("LSE/WINE",type="xts") 

#download data from Yahoo!Finance (.xts) 
Rennova.Health<-getSymbols("RNVA") 

#download data from stooq.pl and change them into xts 
data<-read.csv("http://stooq.pl/q/d/l/?s=EUR&i=d",header=TRUE) 
EUR<-xts(data[,-1],order.by=as.POSIXct(data[,1])) 

#choose closing price and name them 
zamkniecie1<-Wine$"Last Close" 
zamkniecie2<-RNVA$RNVA.Close 
zamkniecie3<-EUR$Zamkniecie 

#MARGE! into one 
all.in.one<-merge(zamkniecie1, zamkniecie2, zamkniecie3) 

Vielen Dank für Ihre Hilfe!

+0

'merge (merge (zamkniecie1, zamkniecie2, by = "Termine"), zamkniecie3, by = "Termine")' ist die Art, wie ich denken kann, die Serie drei Mal unter der Annahme, alle 'dates' haben Spalte – Psidom

+0

Ihr Prntscr Link funktioniert nicht – patrickmdnet

Antwort

1

Ich denke, das Problem, das Sie haben, ist, dass Ihre xts Zeit index für zamkniecie3 eine "PST" -Zeitzone angehängt hat. Sie können es mit as.Date konvertieren und dann erfolgreich zusammenführen.

index(zamkniecie3) <- as.Date(index(zamkniecie3)) 

#MERGE! into one 
all.in.one <- merge(zamkniecie1, zamkniecie2, zamkniecie3) 
+0

Vielen Dank für Ihre Hilfe. Es klappt! – Baska

1

Das Problem ist, dass Quandl und getSymbols beide xts Objekte mit einem Date eingestuft Index zurück, aber Sie schaffen EUR mit einem POSIXct eingestuft Index. Die Klasse Date hat keine Zeitzone und wird daher so behandelt, als befände sie sich in der UTC-Zeitzone. as.POSIXct verwendet standardmäßig Ihre lokale Zeitzone, sodass das Objekt EUR eine andere Zeitzone hat als die anderen beiden Objekte.

Hier ist eine vereinfachte Version des Codes, die dieses Problem vermeidet read.zoo durch die Verwendung, die folgert richtig, dass die CSV von stooq.pl heruntergeladen Date eingestuft Index hat.

library('quantmod') 
library('Quandl') 
# download data (.xts) using Quandl 
Wine <- Quandl("LSE/WINE", type="xts") 
# download data from Yahoo!Finance (.xts) 
RNVA <- getSymbols("RNVA", auto.assign=FALSE) 
# download data from stooq.pl and change them into xts 
EUR <- as.xts(read.zoo("http://stooq.pl/q/d/l/?s=EUR&i=d", header=TRUE, sep=",")) 
# merge into one 
all.in.one <- merge(Wine[,"Last Close"], RNVA[,"RNVA.Close"], EUR$Zamkniecie) 

Wenn Sie nur die Codezeile aktualisieren möchten, müssen Sie Ihren Anruf as.POSIXct zu as.Date ändern, oder fügen Sie tz="UTC" zu Ihrem as.POSIXct Anruf.

# download data from stooq.pl and change them into xts 
data <- read.csv("http://stooq.pl/q/d/l/?s=EUR&i=d",header=TRUE) 
EUR <- xts(data[,-1], order.by=as.Date(data[,1])) 
# or: 
EUR <- xts(data[,-1], order.by=as.POSIXct(data[,1], tz="UTC")) 
+1

Danke für Ihren ausführlichen Kommentar! Es hilft wirklich, wenn Sie das Problem verstehen. – Baska

+0

@Baska: Es ist kein Kommentar, es ist eine Antwort. Dies ist ein Kommentar. Lesen Sie auch [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Http://stackoverflow.com/help/someone-answers). –