2012-03-26 1 views
1

Я либо неправильно понимаю документы, либо столкнулся с проблемой с параметром drop.time=TRUE в to.weekly(). Для простого примера, добавьте компонент времени на некоторых примерах ежедневных данных и раскатать его до еженедельного:Проблема с параметром to.weekly drop.time

library(xts) 
data(sample_matrix) 
d <- as.xts(sample_matrix) 
index(d) <- index(d)+50 

w1 <- to.weekly(d, drop.time=TRUE) 
head(w1,1) 
         d.Open d.High d.Low d.Close 
2007-01-07 00:00:50 50.03978 50.42188 49.95041 49.99185 

w2 <- to.weekly(d, drop.time=FALSE) 
head(w2,1) 
         d.Open d.High d.Low d.Close 
2007-01-07 00:00:50 50.03978 50.42188 49.95041 49.99185 

документы говорят:

Установка drop.time в TRUE (по умолчанию) будет конвертировать ряд что включает компонент времени в один с индексом даты, так как индекс времени часто малозначен в более низких частотных рядах.

This question упоминает, что drop.time зависит от indexClass(d)[1] == 'POSIXt' но, похоже, не помогло:

indexClass(d) 
[1] "POSIXct" "POSIXt" 

indexClass(d) <- c('POSIXt', 'POSIXct') 
w3 <- to.weekly(d, drop.time=TRUE, name=NULL) 
head(w3,1) 
         Open  High  Low Close 
2007-01-07 00:00:50 50.03978 50.42188 49.95041 49.99185 

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

+0

Похоже, что это может быть ошибка в 'xts :::. Drop.time'. Я расследую. –

ответ

1

Это было исправлено в r613 по адресу R-forge. xts:::.drop.time искал виртуальный класс POSIXt в первой позиции атрибута класса, но (в какой-то момент) порядок классов POSIXct и POSIXt был включен в базу R. Я попытался сделать эту проверку более надежной для будущих изменений.

Я также сделал xts:::.drop.time действительно изменил базовый индекс. Он устанавливал indexClass(x) <- "Date", но основным индексом все еще был исходный POSIXt раз (включая внутридневные компоненты). Это вызовет фанковые слияния.

library(xts) 
data(sample_matrix) 
d1 <- d2 <- as.xts(sample_matrix) 
index(d1) <- index(d1)+50 
D1 <- to.daily(d1) 
D2 <- to.daily(d2) 
head(merge(D1,D2),2) # old behavior 
      d1.Open d1.High d1.Low d1.Close d2.Open d2.High d2.Low d2.Close 
2007-01-02  NA  NA  NA  NA 50.03978 50.11778 49.95041 50.11778 
2007-01-02 50.03978 50.11778 49.95041 50.11778  NA  NA  NA  NA 
head(merge(D1,D2),1) # new behavior 
      d1.Open d1.High d1.Low d1.Close d2.Open d2.High d2.Low d2.Close 
2007-01-02 50.03978 50.11778 49.95041 50.11778 50.03978 50.11778 49.95041 50.11778 

Спасибо за отчет и пример!

+0

Спасибо за поддержку и отличные инструменты, Джош. Сорта жаль, что это был отчет об ошибке. – khoxsey

+0

@khoxsey: не пожалеете. Отзывы пользователей помогают создать более качественное программное обеспечение. –