2010-12-14 2 views
5

Создайте объект xts с двумя строками.Настройка индекса xts

library(xts) 
junk<-xts(c(1,2),as.Date(c("2010-01-01","2010-05-01"))) 
junk 
>   [,1] 
> 2010-01-01 1 
> 2010-05-01 2 

Почему не изменяется индекс для первой строки?

time(junk[1])<-as.Date("2010-02-01") 
junk 
>   [,1] 
> 2010-01-01 1 
> 2010-05-01 2 

Я понимаю, что следующие работы, но почему это не работает?

time(junk)[1]<-as.Date("2010-02-01") 
junk 
>   [,1] 
> 2010-02-01 1 
> 2010-05-01 2 

Спасибо,
Билл

ответ

2

даты в временных рядов не ссылки с "[". Они больше похожи на имена розеток в dataframes. Они сохраняются в списке «индекс» списка атрибутов. В дополнение к этому, они не являются Date класса, а класс DateTime, чтобы вы необходимость может использовать POSIXct:

> attributes(junk)$index[1] <- as.POSIXct("2010-02-01") 
> junk 
      [,1] 
2010-02-01 1 
2010-05-01 2 

Edit: более точно $ индекс атрибута внутренне в секундах, но метод времени будет принять различные классы присваивания.

+0

Я запомню, что функция атрибутов. Я все еще работаю над этими методами («время <-»). Это хорошая идея для меня использовать as.POSIXct(), а не as.Date()? Большинство моих данных времени будут ежедневно или ежемесячно (минимальные и второстепенные требования редки, но возможны). –

+0

В этом случае это не требуется, так как существует функция времени <. Это означает, что класс назначаемого объекта сначала оценивается, и когда он класса Date, что он будет правильно умножен на 24 * 60 * 60 и смещение, применяемое до того, как оно будет забито во внутреннее представление, которое находится в секундах. –

2
time(junk[1]) <- as.Date("2010-02-01") 

выше не меняет индекс первого ряда junk, потому что Подменит создает новый объект - без ссылки на junk -го time<-.xts заменяет индекс нового объекта.

+2

Кроме метода времени <-. Xts. Это не видно, но появляется с методами ('время <-'). –

+0

@Dwin хороший catch. Я смотрел «время», а не «время <-». Это то, что я получаю для публикации прямо перед сном. –

+0

Это имеет смысл. Кроме того, во время (неактивный) [1] оператор (последний кусок кода), является новым объектом подмножества, созданным, который ссылается на хлам? И эта ссылка заставляет мусор модифицироваться? –

7

Прямой ответ на сообщение, что магия находится внутри attr<-, как говорит Джош. Сначала подмножество объекта просто создает новый объект, который сразу же удаляется один раз < - закончен.

Кроме того, вы можете увидеть «внутренности» индекса через функцию .index(). По существу, вектор типа double или integer, который отображается в POSIXct, с некоторыми прикрепленными атрибутами. Класс, который вы назначаете, автоматически принудительно перемещается вперед и назад. Это упрощает работу внутренних компонентов - и позволяет вам делать что-либо с любым классом времени, который вам нужен за его пределами.

В целом, дата будет самым чистым способом сохранить TZ и избавит вас от проблем, но помните, что стоимость этого скрытого аспекта - это функция index(). Это должно будет воссоздать объект, который вы ожидаете.

+0

Добро пожаловать в stackoverflow, Jeff! – Shane

Смежные вопросы