2016-04-13 10 views
0

Ich habe ein EURUSD-Daten im XTS-Format, es ist eine Anomalie Wert aufgetreten am High-Preis 2008-03-17. Ich möchte diesen Wert durch 0,7 ersetzen, aber ich kann es nicht richtig machen.Wie ersetze ich den hohen Preis eines bestimmten Datums für ein xts-Daten?

Der Code ist unten und Daten können von here

library(xts) 
EURUSD_DAY <- structure(c(0.64008, 0.635, 0.63504, 0.64354, 13.717, 0.64033, 
    0.63767, 0.62881, 0.63179, 0.64029, 0.635, 0.63865, 0, 0, 0, 0.64029, 0.635, 
    0.63865), class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date", 
    .indexTZ = "UTC", tzone = "UTC", index = structure(c(1205452800, 1205712000, 
    1205798400), tzone = "UTC", tclass = "Date"), .Dim = c(3L, 6L), 
    .Dimnames = list(NULL, c("EURUSD_DAY.Open", "EURUSD_DAY.High", 
    "EURUSD_DAY.Low", "EURUSD_DAY.Close", "EURUSD_DAY.Volume", 
    "EURUSD_DAY.Adjusted"))) 
#EURUSD_DAY <- as.xts(read.zoo("EURUSD_DAY.csv", sep=",", header=TRUE)) 
EURUSD_DAY["2008-03-17"] 
      EURUSD_DAY.Open EURUSD_DAY.High EURUSD_DAY.Low 
2008-03-17   0.635   13.717  0.62881 
      EURUSD_DAY.Close EURUSD_DAY.Volume EURUSD_DAY.Adjusted 
2008-03-17   0.635     0    0.635 

heruntergeladen werden ich den folgenden Code versucht, den EURUSD_DAY.High Wert zu ersetzen. aber es hat nicht funktioniert:

> a <- coredata(EURUSD_DAY["2008-03-17"]) 
> a 
    EURUSD_DAY.Open EURUSD_DAY.High EURUSD_DAY.Low 
[1,]   0.635   13.717  0.62881 
    EURUSD_DAY.Close EURUSD_DAY.Volume EURUSD_DAY.Adjusted 
[1,]   0.635     0    0.635 
> a[1,2] 
EURUSD_DAY.High 
     13.717 
> a[1,2] <- 0.7 
> a[1,2] 
EURUSD_DAY.High 
      0.7 
> coredata(EURUSD_DAY["2008-03-17"])[1,2] <- 0.7 
Warning message: 
In NextMethod(.Generic) : 
    number of items to replace is not a multiple of replacement length 
> EURUSD_DAY["2008-03-17"] 
      EURUSD_DAY.Open EURUSD_DAY.High EURUSD_DAY.Low 
2008-03-17   0.635   13.717  0.62881 
      EURUSD_DAY.Close EURUSD_DAY.Volume 
2008-03-17   0.635     0 
      EURUSD_DAY.Adjusted 
2008-03-17    0.635 

Antwort

2

Ich bin nicht sicher, was Sie versuchen, mithilfe von coredata zu tun ... aber der richtige Ansatz ist die reguläre Teilmenge Funktion auf dem Original-Objekt zu verwenden, und geben Sie sowohl die Zeile und die Spalte im Aufruf.

R> EURUSD_DAY["2008-03-17", "EURUSD_DAY.High"] <- 0.7 
R> EURUSD_DAY 
      EURUSD_DAY.Open EURUSD_DAY.High EURUSD_DAY.Low EURUSD_DAY.Close 
2008-03-14   0.64008   0.64354  0.63767   0.64029 
2008-03-17   0.63500   0.70000  0.62881   0.63500 
2008-03-18   0.63504   0.64033  0.63179   0.63865 
      EURUSD_DAY.Volume EURUSD_DAY.Adjusted 
2008-03-14     0    0.64029 
2008-03-17     0    0.63500 
2008-03-18     0    0.63865 
+0

einfache und unkomplizierte Lösung, danke! – Daniel