поиск и устранение несоответствий в датафреймах

library(quantmod)
library(rusquant)
library(tseries)
library(timeDate)

startDate <- as.Date('2018-01-01')
endDate <- as.Date('2020-04-14')

tickers <- c("TATN", "TATNP")

getSymbols(tickers, src = 'Finam', period = '30min', from = startDate, to = endDate)

TATN <- data.table(time = index(TATN$TATN.Open), TATN$TATN.Open, TATN$TATN.Close)
TATNP <- data.table(time = index(TATNP$TATNP.Open), TATNP$TATNP.Open, TATNP$TATNP.Close)

Я скачиваю котировки акций с финама и сталкиваюсь с проблемой потери части данных по одной из бумаг. в примере кода скачиваются данные по ценам с шагом в 30 минут, и в итоге я получаю фреймы разной длинны, так как в одном из фреймов теряется одна и более котировок, что приводит к разной длинне полученных данных Например в моем коде тикер TATN имеет длинну 10366 , а TATNP имеет длинну 10364 , соответственно выпало 2 котировки.

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

Как я могу решить эту задачу?

Пример данных в таблице по ссылке

https://yadi.sk/d/dr0W3UO_U91nSA


Ответы (1 шт):

Автор решения: aleksandr barakin

так как примера данных не предоставлено, приведу абстрактный пример.

допустим, есть две data.table:

> t1 <- data.table(c(1, 2, 4), 1:3)
> t1
   V1 V2
1:  1  1
2:  2  2
3:  4  3
> t2 <- data.table(c(1, 2, 3, 5), 5:8)
> t2
   V1 V2
1:  1  5
2:  2  6
3:  3  7
4:  5  8

получить только те строки из t1, в которых V1 совпадает с V1 из t2:

> t1[V1 %in% t2$V1]
   V1 V2
1:  1  1
2:  2  2

и взаимообразно, получить только те строки из t2, в которых V1 совпадает с V1 из t1:

> t2[V1 %in% t1$V1]
   V1 V2
1:  1  5
2:  2  6
→ Ссылка