Заполнение недостающих данных в объекте цены акции xts

У меня есть данные о внутридневных ценах за 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

Цените помощь.


r xts
person codingknob    schedule 20.05.2011    source источник
comment
Я действительно не совсем уверен, что вы здесь просите ... Я загрузил ваши данные, посмотрел на индекс, и каждый раз он появляется на каждом последующем интервале. 389 значений для столбцов AMR и 389 для attr(,"index"). Я не вижу недостающих точек данных. Теперь, когда отсутствует первая точка в 9:31, у вас есть данные для нее? Я имею в виду, что все, что вам нужно сделать, это сдвинуть индексы индекса и атрибутов на единицу и заполнить первый. Если это так, я могу помочь вам без проблем. В противном случае я действительно не понимаю, в чем ваша проблема ....   -  person msikd65    schedule 22.05.2011
comment
Привет, msikd65 - спасибо за ответ. Отсутствуют данные в 9:31. Поскольку у меня нет данных за это время, я хотел бы скопировать данные в том виде, в котором они существуют в 9:32, и вставить их во временной интервал 9:31. Таким образом, я могу сделать временные ряды регулярными и согласованными с любым другим торговым днем, отличным от половины рабочего дня, и по ценам на акции. Я хочу выполнять различную аналитику, требующую регулярных временных рядов. Цените помощь.   -  person codingknob    schedule 22.05.2011
comment
в какой форме находятся ваши данные? Я не очень знаком с этим .rda. Я предполагаю, что существует фрейм данных (может быть, он называется 's'?) Со всеми данными AMR?   -  person msikd65    schedule 22.05.2011
comment
хорошо, теперь, когда я смотрю на это, вы используете zoo и xts, с которыми я вообще не знаком. Я мог бы предложить очень уродливую работу, но это зависит от данных, находящихся во фреймах данных ...   -  person msikd65    schedule 22.05.2011
comment
Привет, msikd65 - спасибо, что нашли время. Извините за неудобства. Я использую тип объекта xts, учитывая, что я использую функции из различных пакетов, которые требуют, чтобы данные были типа xts. Проблема на поверхности кажется довольно простой, и ссылка, которую я предоставил в теле моего сообщения, должна помочь с объектами xts, но по какой-то причине я не могу заставить ее работать с моим объектом. распространенная проблема для людей, работающих с данными финансовых временных рядов, поскольку качество данных обычно является проблемой. Таким образом, должен быть способ вставить элемент в объект xts.   -  person codingknob    schedule 24.05.2011
comment
Есть какие-нибудь мысли по этому поводу от тех, кто работает с объектами xts?   -  person codingknob    schedule 25.05.2011


Ответы (1)


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)
person Joshua Ulrich    schedule 29.05.2011
comment
Это именно то, что мне нужно. Спасибо. Я также просто подумал, что следующее также работает: s ‹- merge (s, timeBasedSeq (paste (start (s), end (s), M, sep = /))) после s‹ - na.locf (s) - person codingknob; 30.05.2011