【问题标题】:Get time from xts index从 xts 索引获取时间
【发布时间】:2011-10-13 15:58:40
【问题描述】:

我有一个 xts 对象,x。我想根据索引中的时间戳运行一个 for 循环直到某个时间。

> index(x)
[1] "2011-10-12 16:44:00 SAST"

假设我想运行我的循环,只要索引中的时间小于 16:40:00。给定上述索引的格式,如何去除时间分量?

【问题讨论】:

    标签: r xts


    【解决方案1】:

    这应该会让你进入你想去的地方。使用format,您只提取小时、分钟和秒部分。 ?strptime 的帮助页面提供了有关用于提取信息的符号的更多详细信息。

    #if you don't have your string in an appropriate format yet
    (x <- strptime("2011-10-12 16:44:00 SAST", format = "%Y-%m-%d %H:%M:%S"))
      [1] "2011-10-12 16:44:00"
    class(x)
      [1] "POSIXlt" "POSIXt" 
    (new.x <- format(x, format = "%H:%M:%S")) 
      [1] "16:44:00"
    

    【讨论】:

    • 谢谢,很有魅力。但是有一个问题,为了将这个时间分量与任意时间进行比较,比如 16:00:00,我该怎么做呢?我尝试过:if(new.x > strptime("16:00:00", "%H:%M:%S"),但它似乎没有接受它,因为 new.x 是一个历史性的值和新时间具有今天的日期
    • @E.D.我想可以创建一个带有日期的新变量,或者也可以让你当前的变量带有日期。
    【解决方案2】:

    问题在于正确设置时区。在我的系统上,“SAST”的 tz 规范无效,但在你的系统上它可能是:

    x[ index(x) < as.POSIXct( "2011-10-12 16:44:00", tz= SAST") ]
    

    (似乎是 UTC +2。)我收回我所说的关于我的系统无法识别它的内容。

     as.POSIXct( "2011-10-12 16:44:00", tz= "Africa/Johannesburg")
    # [1] "2011-10-12 16:44:00 SAST"
    

    所以使用:

    x[ index(x) <= as.POSIXct( "2011-10-12 16:44:00", tz= "Africa/Johannesburg")]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-16
      • 2015-10-30
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      相关资源
      最近更新 更多