Pregunta

Tengo problemas para eliminar filas duplicadas en un objeto XTS. Tengo un script R que descargará los datos financieros de Tick de una moneda y lo convertirá en un objeto XTS de formato OHLC. El script también extrae nuevos datos cada 15 minutos. Los nuevos datos se descargan desde el primer comercio de hoy hasta el último comercio grabado de hoy. Los viejos datos anteriores descargados se almacenaron en formato .rData y se llamaron. Luego, los nuevos datos se agregan a los datos anteriores y sobrescribe los datos antiguos en formato .rData.

Aquí hay un ejemplo de cómo se ven mis datos:

                      .Open   .High    .Low  .Close   .Volume .Adjusted
2012-01-07 00:00:11 6.69683 7.01556 6.38000 6.81000  48387.58   6.81000
2012-01-08 00:00:09 6.78660 7.20000 6.73357 7.11358  57193.53   7.11358
2012-01-09 00:00:57 7.08362 7.19100 5.81000 6.32570 148406.85   6.32570
2012-01-10 00:01:01 6.32687 6.89000 6.00100 6.36000 110210.25   6.36000
2012-01-11 00:00:07 6.44904 7.13800 6.41266 6.90000  99442.07   6.90000
2012-01-12 00:01:02 6.90000 6.99700 6.33700 6.79999 140116.52   6.79999
2012-01-13 00:02:01 6.78211 6.80400 6.40000 6.41000  60228.77   6.41000
2012-01-14 00:00:23 6.42000 6.50000 6.23150 6.31894  25392.98   6.31894

Ahora, si ejecuto el script nuevamente, agregaré los nuevos datos al XTS.

                      .Open   .High    .Low  .Close   .Volume .Adjusted
2012-01-07 00:00:11 6.69683 7.01556 6.38000 6.81000  48387.58   6.81000
2012-01-08 00:00:09 6.78660 7.20000 6.73357 7.11358  57193.53   7.11358
2012-01-09 00:00:57 7.08362 7.19100 5.81000 6.32570 148406.85   6.32570
2012-01-10 00:01:01 6.32687 6.89000 6.00100 6.36000 110210.25   6.36000
2012-01-11 00:00:07 6.44904 7.13800 6.41266 6.90000  99442.07   6.90000
2012-01-12 00:01:02 6.90000 6.99700 6.33700 6.79999 140116.52   6.79999
2012-01-13 00:02:01 6.78211 6.80400 6.40000 6.41000  60228.77   6.41000
2012-01-14 00:00:23 6.42000 6.50000 6.23150 6.31894  25392.98   6.31894
2012-01-14 00:00:23 6.42000 6.75000 6.22010 6.57157  75952.01   6.57157

Como puede ver, la última línea es el mismo día que la segunda línea de la última a la última. Quiero mantener la última fila para la última fecha y eliminar la segunda en la última fila. Cuando intento el siguiente código para eliminar las filas duplicadas, no funciona, las filas duplicadas permanecen allí.

xx <- mt.xts[!duplicated(mt.xts$Index),]
xx
.Open .High .Low .Close .Volume .Adjusted

No obtengo ningún resultado. ¿Cómo puedo eliminar las entradas de datos duplicados en un objeto XTS utilizando el índice como indicador de duplicación?

¿Fue útil?

Solución

Debería ser index(mt.xts) más bien que mt.xts$Index? Lo siguiente parece funcionar.

# Sample data
library(xts)
x <- xts( 
  1:10, 
  rep( seq.Date( Sys.Date(), by="day", length=5 ), each=2 ) 
)

# Remove rows with a duplicated timestamp
y <- x[ ! duplicated( index(x) ),  ]

# Remove rows with a duplicated timestamp, but keep the latest one
z <- x[ ! duplicated( index(x), fromLast = TRUE ),  ]

Otros consejos

En mi caso,

x <- x[! duplicated( index(x) ),]

No funcionó según lo previsto, porque el sistema de alguna manera hace que la fecha sea única en cada fila.

x <- x[! duplicated( coredata(x) ),]

Esto puede funcionar si la solución anterior no ayudó.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top