Während FXQuantTrader's answer das Problem löst, diagnostiziert oder adressiert es nicht richtig die Ursache.
Es ist nichts Falsches daran, zwei xts-Objekte mit unterschiedlichen Indexklassen zusammenzuführen, da alle xts-Objekte den Index intern als POSIXct speichern. Zum Beispiel:
Das Problem liegt daran, dass Ihre beiden XTS-Objekte unterschiedliche Zeitzonen haben. Beachten Sie, dass dataset
eine UTC-Zeitzone hat, da ein Date-Index keine Zeitzone haben kann.
R> str(dataset)
An ‘xts’ object on 2011-06-27/2016-06-24 containing:
Data: num [1:1305, 1:2] 33.5 34.3 34.6 35.1 36 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:2] "DBK.DE.Adjusted" "DTE.DE.Adjusted"
Indexed by objects of class: [Date] TZ: UTC
xts Attributes:
List of 2
$ src : chr "yahoo"
$ updated: POSIXct[1:1], format: "2016-07-09 08:21:12"
Aber QReturns
hat ein ‚leeres‘ TZ-Attribut (was bedeutet, dass Ihre lokale Zeitzone verwendet wird).
R> str(QReturns)
An ‘xts’ object on 2011-06-30/2016-06-24 containing:
Data: num [1:21, 1:2] 0.047 -0.354 0.118 0.267 -0.215 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:2] "quarterly.returns" "quarterly.returns.1"
Indexed by objects of class: [POSIXct,POSIXt] TZ:
xts Attributes:
NULL
QReturns
sieht wie folgt aus, weil Sie as.xts
auf einem data.frame genannt, und as.xts.data.frame
gibt dateFormat = "POSIXct"
standardmäßig. Wenn Sie dateFormat = "Date"
festlegen, haben Sie kein Problem beim Zusammenführen dieser beiden Objekte.
Beachten Sie auch, dass es eine schlechte Methode ist, Methoden direkt aufzurufen (merge.xts
). Sie sollten einfach den merge
Generic aufrufen und das S3-System den Methodenversand verarbeiten lassen.
QReturns <- as.xts(as.data.frame(lapply(dataset,quarterlyReturn)),dateFormat="Date")
Quarterly_Portfolio <- merge(dataset,QReturns)
head(Quarterly_Portfolio)
# DBK.DE.Adjusted DTE.DE.Adjusted quarterly.returns quarterly.returns.1
# 2011-06-27 33.5422 7.820 NA NA
# 2011-06-28 34.2747 7.786 NA NA
# 2011-06-29 34.6194 7.909 NA NA
# 2011-06-30 35.1193 8.085 0.04701838 0.03388747
# 2011-07-01 36.0286 7.992 NA NA
# 2011-07-04 35.7787 7.995 NA NA
Ich persönlich würde dies vermeiden alle zusammen durch nicht von xts Umwandlung zu xts data.frame zurück, wenn QReturns
Berechnung. Sie können lapply
direkt an einem xts-Objekt aufrufen und dann die Ergebnisse unter Verwendung von do.call(merge, ...)
wieder zusammenführen.
QReturns <- do.call(merge, lapply(dataset, quarterlyReturn))
Quarterly_Portfolio <- merge(dataset, QReturns)
Ihre getSymbols
und "verbinden" Schritte können auch kompakter gemacht werden:
PF <- new.env()
getSymbols(tickers, from=StartDate, to=EndDate, env=PF)
# combine the adjusted close values in one (xts) object
dataset <- do.call(merge, eapply(PF, Ad))
Wow. Vielen Dank. –
Interessant. Danke für das Teilen – FXQuantTrader