【问题标题】:R POSIXct origin weird behaviorR POSIXct 起源奇怪的行为
【发布时间】:2016-06-06 16:11:22
【问题描述】:

as.POSIXct() 有问题。我需要处理大量数据,为了尽量减少用于日期的内存,我想更改origin。所以,我使用:

as.integer(as.POSIXct("2015-05-15 00:00:01",origin=("2015-05-15 00:00:00")))

当我认为我应该得到 1 时得到 1431637201。问题是如何处理起源?

【问题讨论】:

    标签: r date posix


    【解决方案1】:

    origin 参数不适用于此目的。

    试试

    as.integer(as.POSIXct("2015-05-15 00:00:01") - as.POSIXct("2015-05-15 00:00:00"))
    #[1] 1
    

    as.integer(difftime("2015-05-15 00:00:01", "2015-05-15 00:00:00"))
    

    origin 参数用于将数字转换为日期/日期时间对象。该数字表示自“纪元”以来经过的时间单位(以秒为单位)。 R 中 POSIX* 类的标准纪元是“1970-01-01”。其他系统使用其他默认来源。当使用代表源自其他系统(如 SAS 或 Excel)的日期/时间对象的数字时,“原点”需要从“通常”“1970-01-01”更改并根据源的定义进行调整从中提供了数字,以便在 R 中重现正确的日期/时间。

    如果提供日期而不是数字作为第一个参数,则忽略“原点”选项。

    在 OP 中显示的示例中获得的数字取决于时区,在这种情况下可以像这样复制:

    as.POSIXct(1431637201, origin="1970-01-01", tz="CEST-3")
    #[1] "2015-05-15 00:00:01 CEST"
    

    有关使用origin 的更多信息和示例,请参阅?as.POSIXct?base::as.Date

    【讨论】:

    • 不确定您想如何包含秒数。放入括号
    • 谢谢你,@PierreLafortune
    • 有没有办法避免使用像1431637201 这样的大数字而仍然使用POSIXct 格式?
    • @Andrew 由于这些数字代表某个时间点(纪元)之后的秒数,因此这些数字几乎不可避免地很大。处理较小数字的一种可能性是减去与可以定义为起点的日期/日期时间相对应的偏移量,例如my.start <- as.integer(as.POSIXct("2016-06-01 00:01:00")); as.integer(as.POSIXct("2016-06-07 00:01:00") - my.start)。这类似于上面发布的建议,difftime() 可能是最简单的选择之一。希望这会有所帮助。
    猜你喜欢
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    相关资源
    最近更新 更多