Question

Je rencontre des difficultés pour supprimer les lignes dupliquées dans un objet xts. J'ai un script R qui téléchargera les données financières des ticks d'une devise et les convertira en un objet xts au format OHLC. Le script extrait également de nouvelles données toutes les 15 minutes. Les nouvelles données sont téléchargées du premier commerce d'aujourd'hui au dernier commerce enregistré d'aujourd'hui. Les anciennes données téléchargées précédemment étaient stockées au format .Rdata et appelées. Ensuite, les nouvelles données sont ajoutées aux anciennes données et écrasent les anciennes données au format .Rdata.

Voici un exemple de ce à quoi mes données ressemblent:

                      .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

Maintenant, si je lance à nouveau le script, j'ajouterai les nouvelles données aux 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

Comme vous pouvez le voir, la dernière ligne correspond au même jour que l'avant-dernière ligne. Je souhaite conserver la dernière ligne pour la dernière date et supprimer l'avant-dernière ligne. Lorsque j'essaye le code suivant pour supprimer les lignes dupliquées, cela ne fonctionne pas, les lignes dupliquées restent là.

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

Je n'obtiens aucun résultat. Comment puis-je supprimer des entrées de données en double dans un objet xts en utilisant l'index comme indicateur de duplication?

Était-ce utile?

La solution

Ne devrait-il pas être index(mt.xts) plutôt que mt.xts$Index? Ce qui suit semble fonctionner.

# 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 ),  ]

Autres conseils

Dans mon cas,

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

n'a pas fonctionné comme prévu, car le système rend en quelque sorte la date-heure unique dans chaque ligne.

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

Cela peut fonctionner si la solution précédente n'a pas aidé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top