Проблема с параметром to.weekly drop.time - PullRequest
1 голос
/ 27 марта 2012

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

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 (по умолчанию) преобразует ряды, включающие компонент времени, в один, имеющий только индекс даты, так как индекс времени часто не имеет большого значения в низкочастотных сериях.

Этот вопрос упоминает, что 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

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

1 Ответ

1 голос
/ 02 апреля 2012

Это было исправлено в 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...