【问题标题】:Setting an xts Index设置 xts 索引
【发布时间】:2011-05-25 00:22:44
【问题描述】:

构建一个包含两行的 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   

谢谢,
比尔

【问题讨论】:

    标签: r xts


    【解决方案1】:

    对帖子的直接回答是,正如 Josh 所说,attr&lt;- 的魔力在其中。首先对对象进行子集化只是创建一个新对象,该对象会在时间完成后立即处理。

    此外,您还可以通过.index() 函数查看索引的“内部结构”。本质上是映射到 POSIXct 时间的双精度或整数类型的向量 - 附加了一些属性。您分配的课程会自动来回强制转换。这使得内部更容易维护 - 并让您可以在任何时间类之外进行操作。

    一般来说,Date 将是避免 TZ 和 secs 麻烦的最干净的方法,但请记住,这个隐藏方面的成本是函数 index()。这将不得不重新创建您期望的对象。

    【讨论】:

    • 欢迎来到 stackoverflow,杰夫!
    【解决方案2】:
    time(junk[1]) <- as.Date("2010-02-01") 
    

    上面没有改变junk第一行的索引,因为子集创建了一个新对象——没有引用junk——而time&lt;-.xts替换了新对象的索引。

    【讨论】:

    • 除非有时间time<-)。
    • @Dwin 不错。我在看time,而不是time&lt;-。这就是我在睡觉前发布的内容。
    • 这是有道理的。此外,在 time(junk)[1] 语句(最后一段代码)中,是否创建了一个引用垃圾的新子集对象?而且,该参考强制垃圾被修改?
    • @Bill time(junk) 返回junk 的索引属性;而且我对 R 的对象属性的解析/评估规则还不够熟悉,无法确切地告诉你 attr&lt;- 实际在做什么......但它可能就像你提到的那样。
    【解决方案3】:

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

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

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

    【讨论】:

    • 我会记住属性函数。我仍在研究方法(“时间
    • 在这种情况下不需要它,因为有一个时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2015-09-28
    • 2011-05-16
    相关资源
    最近更新 更多