R xts: запрос даты и времени

Я не могу запросить xts для подмножеств, включая диапазон дат и времени. Например:

> head(myxts['2012-01-06 9:30:00/2012-01-06 10:00:00'], 1)
                    Symbol       
2012-01-03 09:30:00 "AA"

> tail(myxts['2012-01-06 9:30:00/2012-01-06 10:00:00'], 1)
                Symbol       
2012-01-06 10:00:00 "AA"

Здесь первая строка 2012-01-03. Почему не 2012-01-06?

ИЗМЕНИТЬ

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

e = myxts['2012-01-06']
e['10:00:00::10:20:00'] # returns all rows in '2012-01-06'

ИЗМЕНИТЬ 2

Обнаружил эту ситуацию, когда ввод «09:45:00», а не «9:45:00», кажется, решает проблему:

> tail(myxts['2011-12-19 9:40:00::2011-12-19 9:45:00'])
                    Symbol DaySec
2011-12-19 16:00:00 "WPI"  "57600"

> tail(myxts['2011-12-19 9:40:00::2011-12-19 09:45:00'])
                    Symbol DaySec  
2011-12-19 09:45:00 "WPI"  "35100"

r xts
person Robert Kubrick    schedule 21.02.2012    source источник


Ответы (2)


'2012-01-06 9:30:00' не является строкой, совместимой с ISO-8601. Каждый компонент времени должен состоять из двух цифр (если он указан), поэтому вам нужно '2012-01-06 09:30:00'.

person Joshua Ulrich    schedule 21.02.2012
comment
хорошо, но разве я не должен получить ошибку в dimnames(x) ‹- dn : длина 'dimnames' [2] не равна размеру массива, если индекс не соответствует какой-либо серии? - person Robert Kubrick; 21.02.2012
comment
Да, это была проблема. И дата, и время должны быть указаны полностью, включая начальный «0». Вы можете видеть, что я использовал неправильное время в первой строке кода моего вопроса. Это сложно... - person Robert Kubrick; 21.02.2012
comment
@RobertKubrick: индекс xts/zoo не имеет ничего общего с dimnames; это отдельные атрибуты. Это не сложно, если вы будете следовать документации (см. ?'[.xts', которую, по общему признанию, не так просто найти). - person Joshua Ulrich; 21.02.2012
comment
Я думаю, что если дата/время искажены, синтаксический анализатор должен выдать ошибку. Как лучше молча включать больше серий? - person Robert Kubrick; 22.02.2012
comment
@RobertKubrick: Вы можете отправить патч или подождать, пока он станет приоритетным для кого-то другого. Если вы пытаетесь отправить патч, проверьте его на зависимости от xts, чтобы ничего не сломать. - person Joshua Ulrich; 22.02.2012
comment
Проблема в строке 81 в parse8601.R. Можно добавить проверку для длины (даты) == 8. Также можно проверить H ‹= 23 и M ‹= 59 и S ‹= 59. - person Robert Kubrick; 22.02.2012
comment
@RobertKubrick: Извините, я знал, что это было в .parseISO8601. В этом случае трудоемкая часть — это установка исправлений и обеспечение того, чтобы вы не нарушили существующий код. - person Joshua Ulrich; 22.02.2012

Работает на меня:

R> now <- Sys.time()
R> foo <- xts(1:100, now + (1:100)*30*60)   # hundred half-hour intervals
R> head(foo)
                          [,1]
2012-02-21 11:48:32.37683    1
2012-02-21 12:18:32.37683    2
2012-02-21 12:48:32.37683    3
2012-02-21 13:18:32.37683    4
2012-02-21 13:48:32.37683    5
2012-02-21 14:18:32.37683    6
R> tail(foo)
                          [,1]
2012-02-23 10:48:32.37683   95
2012-02-23 11:18:32.37683   96
2012-02-23 11:48:32.37683   97
2012-02-23 12:18:32.37683   98
2012-02-23 12:48:32.37683   99
2012-02-23 13:18:32.37683  100

Теперь мы можем извлечь из последнего часа 21 февраля до первого 23 февраля:

R> xtract <- foo["2012-02-21 23:00::2012-02-23 01:00"]
R> head(xtract)
                          [,1]
2012-02-21 23:18:32.37683   24
2012-02-21 23:48:32.37683   25
2012-02-22 00:18:32.37683   26
2012-02-22 00:48:32.37683   27
2012-02-22 01:18:32.37683   28
2012-02-22 01:48:32.37683   29
R> tail(xtract)
                          [,1]
2012-02-22 22:18:32.37683   70
2012-02-22 22:48:32.37683   71
2012-02-22 23:18:32.37683   72
2012-02-22 23:48:32.37683   73
2012-02-23 00:18:32.37683   74
2012-02-23 00:48:32.37683   75
R> 

Я также могу извлечь в течение дня:

R> xtract <- foo["2012-02-23 02:00::2012-02-23 04:00"]
R> xtract
                          [,1]
2012-02-23 02:18:32.37683   78
2012-02-23 02:48:32.37683   79
2012-02-23 03:18:32.37683   80
2012-02-23 03:48:32.37683   81
R> 
person Dirk Eddelbuettel    schedule 21.02.2012
comment
Дирк, у меня все еще есть проблема, но не на всех объектах xts, которые я использую. Должно быть, это какой-то пограничный случай, я добавил к вопросу новый тест, ясно показывающий проблему. - person Robert Kubrick; 21.02.2012