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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top