Одно значение индекса становится NA при преобразовании временных рядов зоопарка в xts.

У меня есть временной ряд зоопарка:

z <- structure(c(55282, 55282, 55282, 55283, 55283, 55283, 55283, 
55283, 55283, 55283, 55283, 2339.96, 2331.98, 2335.53, 2340.33, 
2340.98, 2346.26, 2349.26, 2350.1, 2353.18, 2361.2, 2358.65, 
63.3, 54.5, 58.1, 62.9, 63.7, 69.3, 73.2, 74.5, 77.8, 86.3, 84.2, 
9.8, 8.4, 9, 9.7, 9.8, 10.6, 11.2, 11.5, 12, 13.3, 13), .Dim = c(11L, 
4L), .Dimnames = list(NULL, c("station_id", "ztd", "zwd", "iwv"
)), index = structure(c(14695.875, 14695.9166666667, 14695.9583333333, 
14696, 14696.0416666667, 14696.0833333333, 14696.125, 14696.1666666667, 
14696.2083333333, 14696.25, 14696.2916666667), format = structure(c("m/d/y", 
"h:m:s"), .Names = c("dates", "times")), origin = structure(c(1, 
1, 1970), .Names = c("month", "day", "year")), class = c("chron", 
"dates", "times")), class = "zoo")

Глядя на структуру, она (насколько я понимаю) выглядит нормально:

> str(z)
‘zoo’ series from (03/27/10 21:00:00) to (03/28/10 07:00:00)
  Data: num [1:11, 1:4] 55282 55282 55282 55283 55283 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:4] "station_id" "ztd" "zwd" "iwv"
  Index: Classes 'chron', 'dates', 'times'  atomic [1:11] 14696 14696 14696 14696 14696 ...
  ..- attr(*, "format")= Named chr [1:2] "m/d/y" "h:m:s"
  .. ..- attr(*, "names")= chr [1:2] "dates" "times"
  ..- attr(*, "origin")= Named num [1:3] 1 1 1970
  .. ..- attr(*, "names")= chr [1:3] "month" "day" "year"

и с данными все в порядке:

> z
                    station_id     ztd  zwd  iwv
(03/27/10 21:00:00)      55282 2339.96 63.3  9.8
(03/27/10 22:00:00)      55282 2331.98 54.5  8.4
(03/27/10 23:00:00)      55282 2335.53 58.1  9.0
(03/28/10 00:00:00)      55283 2340.33 62.9  9.7
(03/28/10 01:00:00)      55283 2340.98 63.7  9.8
(03/28/10 02:00:00)      55283 2346.26 69.3 10.6
(03/28/10 03:00:00)      55283 2349.26 73.2 11.2
(03/28/10 04:00:00)      55283 2350.10 74.5 11.5
(03/28/10 05:00:00)      55283 2353.18 77.8 12.0
(03/28/10 06:00:00)      55283 2361.20 86.3 13.3
(03/28/10 07:00:00)      55283 2358.65 84.2 13.0

Однако, когда я конвертирую данные во временные ряды xts, один из индексов - и только один - изменяется на NA:

> x <- as.xts(z)
> x
                    station_id     ztd  zwd  iwv
(03/27/10 21:00:00)      55282 2339.96 63.3  9.8
(03/27/10 22:00:00)      55282 2331.98 54.5  8.4
(03/27/10 23:00:00)      55282 2335.53 58.1  9.0
(03/28/10 00:00:00)      55283 2340.33 62.9  9.7
(NA NA)                  55283 2340.98 63.7  9.8
(03/28/10 02:00:00)      55283 2346.26 69.3 10.6
(03/28/10 03:00:00)      55283 2349.26 73.2 11.2
(03/28/10 04:00:00)      55283 2350.10 74.5 11.5
(03/28/10 05:00:00)      55283 2353.18 77.8 12.0
(03/28/10 06:00:00)      55283 2361.20 86.3 13.3
(03/28/10 07:00:00)      55283 2358.65 84.2 13.0

Это данные на 01:00 28 марта 2010 года. Я не понимаю, почему это происходит - есть ли у кого-нибудь идеи? Первоначально я обнаружил это в огромном наборе данных (данные за 10 лет), и этого не произошло ни в какие другие даты!


person robintw    schedule 04.09.2012    source источник
comment
Да, для Великобритании сейчас подходящее время года. Вы знаете, как лучше всего проверить, не связаны ли с моими данными странные часовые пояса? Я думал, это все в UTC ...   -  person robintw    schedule 04.09.2012


Ответы (1)


Как правило, все эти проблемы имеют одно и то же происхождение: переход на летнее время. Кажется, что пакет chron приводит к удалению записи.

Но вы можете переключиться на представление POSIXct, чтобы избежать этого недостатка в chron:

R> zz <- xts(coredata(z), order.by=as.POSIXct(index(z)))
R> options("digits.secs"=0)   ## default display w/o microseconds
R> zz
                    station_id     ztd  zwd  iwv
2010-03-27 16:00:00      55282 2339.96 63.3  9.8
2010-03-27 17:00:00      55282 2331.98 54.5  8.4
2010-03-27 17:59:59      55282 2335.53 58.1  9.0
2010-03-27 19:00:00      55283 2340.33 62.9  9.7
2010-03-27 20:00:00      55283 2340.98 63.7  9.8
2010-03-27 20:59:59      55283 2346.26 69.3 10.6
2010-03-27 22:00:00      55283 2349.26 73.2 11.2
2010-03-27 23:00:00      55283 2350.10 74.5 11.5
2010-03-27 23:59:59      55283 2353.18 77.8 12.0
2010-03-28 01:00:00      55283 2361.20 86.3 13.3
2010-03-28 02:00:00      55283 2358.65 84.2 13.0
R> 

Похоже, есть некоторые проблемы с округлением, или, возможно, ваши записи отклоняются на секунду

person Dirk Eddelbuettel    schedule 04.09.2012