Rimuovere le righe duplicate dall'oggetto XTS
-
28-10-2019 - |
Domanda
Ho problemi a eliminare le righe duplicate in un oggetto XTS. Ho uno script R che scaricherà i dati finanziari di zecca di una valuta e li convertirà in un oggetto XTS di formato OHLC. Lo script tira anche nuovi dati ogni 15 minuti. I nuovi dati vengono scaricati dal primo commercio di oggi all'ultimo commercio registrato di oggi. I vecchi dati precedenti scaricati sono stati archiviati in formato .rdata e chiamati. Quindi i nuovi dati vengono aggiunti ai vecchi dati e sovrascrive i vecchi dati in formato .RData.
Ecco un esempio di come apparentemente i miei dati:
.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
Ora, se eseguo di nuovo lo script aggiungerò i nuovi dati agli 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
Come puoi vedere, l'ultima riga è lo stesso giorno del secondo all'ultima riga. Voglio conservare l'ultima riga per l'ultima data ed eliminare la seconda all'ultima riga. Quando provo il seguente codice per eliminare le righe duplicate, non funziona, le righe duplicate rimangono lì.
xx <- mt.xts[!duplicated(mt.xts$Index),]
xx
.Open .High .Low .Close .Volume .Adjusted
Non ottengo alcun risultato. Come posso eliminare le voci di dati duplicate in un oggetto XTS usando l'indice come indicatore della duplicazione?
Soluzione
Non dovrebbe essere index(mt.xts)
piuttosto che mt.xts$Index
? Quanto segue sembra funzionare.
# 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 ), ]
Altri suggerimenti
Nel mio caso,
x <- x[! duplicated( index(x) ),]
Non ha funzionato come previsto, perché il sistema rende in qualche modo la data unica in ogni riga.
x <- x[! duplicated( coredata(x) ),]
Questo potrebbe funzionare se la soluzione precedente non ha aiutato.