Удалить повторяющиеся строки из объекта XTS - PullRequest
4 голосов
/ 15 января 2012

У меня проблемы с удалением дублированных строк в объекте xts.У меня есть R-скрипт, который будет загружать тиковые финансовые данные валюты и конвертировать их в объект XTS формата OHLC.Сценарий также извлекает новые данные каждые 15 минут.Новые данные загружаются с первой сегодняшней сделки до последней зарегистрированной сегодняшней сделки.Старые предыдущие загруженные данные были сохранены в формате .Rdata и вызваны.Затем новые данные добавляются к старым и перезаписывают старые в формате .Rdata.

Вот пример того, как выглядят мои данные:

                      .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

Теперь, если язапустите скрипт еще раз, я добавлю новые данные в 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

Как вы можете видеть, последняя строка совпадает с днем ​​от второй до последней строки.Я хочу сохранить последнюю строку для последней даты и удалить вторую до последней строки.Когда я пытаюсь использовать следующий код для удаления дублированных строк, он не работает, дублированные строки остаются там.

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

Я не получаю никакого результата.Как я могу удалить повторяющиеся записи данных в объекте xts, используя индекс в качестве индикатора дублирования?

Ответы [ 2 ]

14 голосов
/ 15 января 2012

Разве это не должно быть index(mt.xts), а не mt.xts$Index?Кажется, работает следующее.

# 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 ),  ]
1 голос
/ 27 января 2019

В моем случае,

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

не работал должным образом, потому что система каким-то образом делает дату и время уникальными в каждой строке.

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

Это может работать, если предыдущийРешение не помогло.

...