Wiederholen Sie die Werte beim Zusammenführen von XTS -Daten
Frage
Wenn einer meiner Tabellen mehrere Werte für den Zeitstempel und der andere nur einer hat, kann ich den Wert des einzelnen Elements in den mehreren Werten wiederholen?
Zum Beispiel:
XTS_A:
2011/01/01 10:00:00,Bar
2011/01/01 10:00:01,Baz
XTS_B:
2011/01/01 10:00:00,A
2011/01/01 10:00:00,B
2011/01/01 10:00:00,C
2011/01/01 10:00:01,B
Merge_result:
2011/01/01 10:00:00,A,Bar
2011/01/01 10:00:00,B,Bar
2011/01/01 10:00:00,C,Bar
2011/01/01 10:00:01,B,Baz
Reproduzierbares Beispiel:
library(zoo)
library(xts)
XTS_A <- structure(c("Bar", "Baz"), .Dim = c(2L, 1L), index = structure(c(1293894000, 1293894001), tzone = "", tclass = c("POSIXt", "POSIXct")), class = c("xts", "zoo"), .indexCLASS = c("POSIXt", "POSIXct"), .indexTZ = "")
XTS_B <- structure(c("A", "B", "C", "B"), .Dim = c(4L, 1L), index = structure(c(1293894000, 1293894000, 1293894000, 1293894001), tzone = "", tclass = c("POSIXt", "POSIXct")), class = c("xts", "zoo"), .indexCLASS = c("POSIXt", "POSIXct"), .indexTZ = "")
Lösung
Was ist mit einfach danach? Etwas hässliches Beispiel (verwendet eine Schleife, aber schwer zu vermeiden mit sequentiellen Abhängigkeiten wie diesem):
mrg <- merge(XTS_A,XTS_B)
for(r in seq(nrow(mrg)) ) {
if(is.na(mrg[r,1])) {
mrg[r,1] <- mrg[r-1,1]
}
}
> mrg
XTS_A XTS_B
2011-01-01 16:00:00 "Bar" "A"
2011-01-01 16:00:00 "Bar" "B"
2011-01-01 16:00:00 "Bar" "C"
2011-01-01 16:00:01 "Baz" "B"
Der Vorschlag von Joran speichert das Tippen mit der Füllfunktion des Zoo-Pakets:
mrg[,1] <- na.locf(as.vector(mrg$XTS_A))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow