Заполнение недостающих данных в объекте цены акций XTS - PullRequest
2 голосов
/ 20 мая 2011

У меня есть данные цены за 1 минуту, в которых отсутствуют данные.Как таковой, я хочу заполнить их.

Я прочитал предложения в следующем посте и попробовал аналогичную процедуру: R: Заполнение пропущенных дат во временном ряду?

В моем случае пропущенные данные указываютэто первая сделка, т.е. в 09: 31: 00.

> head(s)
                    AMR.Open AMR.High AMR.Low AMR.Close AMR.Volume AMR.WAP AMR.hasGaps AMR.Count
2010-09-10 09:32:00     6.08     6.10    6.07      6.10        298   6.087           0        39
2010-09-10 09:33:00     6.10     6.14    6.10      6.14        274   6.122           0        70
2010-09-10 09:34:00     6.14     6.15    6.13      6.13        472   6.133           0        96
2010-09-10 09:35:00     6.13     6.14    6.13      6.13        291   6.133           0        68
2010-09-10 09:36:00     6.13     6.13    6.11      6.11        548   6.123           0        97
2010-09-10 09:37:00     6.11     6.11    6.11      6.11         67   6.110           0        26

> na.locf(s, xout=seq(as.POSIXct(head(index(s), 1) - 60), as.POSIXct(tail(index(s), 1)), by="1 min")) -> ss

> head(ss)
                    AMR.Open AMR.High AMR.Low AMR.Close AMR.Volume AMR.WAP AMR.hasGaps AMR.Count
2010-09-10 09:32:00     6.08     6.10    6.07      6.10        298   6.087           0        39
2010-09-10 09:33:00     6.10     6.14    6.10      6.14        274   6.122           0        70
2010-09-10 09:34:00     6.14     6.15    6.13      6.13        472   6.133           0        96
2010-09-10 09:35:00     6.13     6.14    6.13      6.13        291   6.133           0        68
2010-09-10 09:36:00     6.13     6.13    6.11      6.11        548   6.123           0        97
2010-09-10 09:37:00     6.11     6.11    6.11      6.11         67   6.110           0        26

Как вы можете видеть выше, возвращаемый объект не заполнен должным образом.

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

> as.POSIXct(head(index(s), 1) - 60)
[1] "2010-09-10 09:31:00 EDT"

> as.POSIXct(tail(index(s), 1))
[1] "2010-09-10 16:00:00 EDT"
> 

Может ли это быть из-за того, что для диапазона дат указан часовой пояс, а для исходного индекса POSIX - нет?Я попытался удалить tz, указав tz = "", но это не удаляет его.При этом, часовой пояс может быть просто красная сельдь.

Я сохранил данные в формате rda (двоичный), если кто-то заинтересован в тестировании:

http://www.speedyshare.com/files/28576853/test.rda

Благодарим за помощь.

1 Ответ

2 голосов
/ 29 мая 2011

na.locf оперирует данными, а не индексом. Если вы хотите добавить строку NA к данным, вам нужно создать подходящий объект xts для rbind до s:

miss <- xts(matrix(1*NA,1,NCOL(s)), first(index(s))-60)
s <- rbind(miss,s)
s <- na.locf(s, fromLast=TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...