设置xts索引

Bil*_*l S 6 r 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   
Run Code Online (Sandbox Code Playgroud)

为什么以下不改变第一行的索引?

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

我意识到以下工作,但为什么上述工作没有?

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


比尔, 谢谢

Jef*_*f R 6

对这篇文章的直接回答是,attr<-正如乔希所说的那样,魔术就在里面.首先对对象进行子集化,只需创建一个新对象,一旦< - 完成,就会立即处理掉.

此外,您可以通过该.index()函数查看索引的"内部" .本质上是一个double或integer类型的向量,它映射到POSIXct时间 - 附加了一些属性.您要分配的课程会自动来回强制.这使内部更容易维护 - 并允许您在外部需要的任何时间类上执行操作.

一般来说,Date将是保持TZ最简单的方法,并且可以解决问题,但请记住,隐藏方面的成本就是功能index().这将不得不重新创建您期望的对象.


42-*_*42- 2

时间序列中的日期不使用“[”引用。它们更像是数据框中的行名。它们存储在属性列表的“索引”叶中。除此之外,它们不是 Date 类,而是 DateTime 类,因此您需要 使用 POSIXct:

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

编辑:更准确地说,attribute$index 内部以秒为单位,但 time 方法将接受各种分配类。