【问题标题】:How do you convert POSIX date to day of year?你如何将 POSIX 日期转换为一年中的某一天?
【发布时间】:2011-12-18 23:42:08
【问题描述】:

标题有:如何将 POSIX 日期转换为日期?

【问题讨论】:

    标签: r datetime


    【解决方案1】:

    data.table 包还提供了一个yday() 函数。

    require(data.table)
    today <- Sys.time()
    yday(today)
    

    【讨论】:

      【解决方案2】:

      我意识到这不是发帖人想要的,但我需要将 POSIX 日期-times 转换为一年中的 小数 天以用于时间序列分析并最终这样做:

      today <- Sys.time()
      
      doy2015f<-difftime(today,as.POSIXct(as.Date("2015-01-01 00:00", tzone="GMT")),units='days')
      

      【讨论】:

        【解决方案3】:

        这就是我的做法:

        as.POSIXlt(c("15.4", "10.5", "15.5", "10.6"), format = "%d.%m")$yday
        # [1] 104 129 134 160
        

        【讨论】:

        • 适用于POSIXlt(如我的回答中所述),但不适用于POSIXct 对象。例如,Sys.time()$yday 不起作用。
        【解决方案4】:

        正如?POSIXlt 所揭示的,POSIXlt 日期(或什至此类的向量)的 $yday 后缀将转换为一年中的某一天。请注意,POSIX 将 1 月 1 日计为第 0 天,因此您可能希望将 1 添加到结果中。

        我花了很长时间才找到这个,所以我想我会ask and answer my own question

        另外,优秀的lubridate 包提供了yday 函数,它只是上述方法的包装。它方便地为其他单元定义了类似的函数(monthyearhour,...)。

        today <- Sys.time()
        yday(today)
        

        【讨论】:

        • 我花了这么长时间的部分原因是如果d 是一个POSIXlt 对象,str(d) 没有表明d 有任何其他属性。这一点,以及 $ 运算符在 POSIXlt 对象的向量上按元素工作意味着不仅仅是通常的提取正在进行。如果有人可以推荐一个不错的起点,我将有兴趣阅读更多相关信息。
        • 而且,为了回应我自己的评论,attributes 是我正在寻找的命令,attributes(d) 提供了所有显示 d 的方式。
        • 嘿,我也在为这个问题而苦苦挣扎。似乎您自己回答了(而不是在不在这里发布的情况下直接回答)。谢谢!
        • 请注意,这只适用于 "POSIXlt" 类的对象。另一个主要类是"POSIXct",它以一种非常不同的方式在内部存储。例如,在Sys.time() 的输出上尝试您的方法。 strftime() 方法适用于这两种类型。
        【解决方案5】:

        另一种方法是使用strftime() 格式化"POSIXt" 对象:

        R> today <- Sys.time()
        R> today
        [1] "2012-10-19 19:12:04 BST"
        R> doy <- strftime(today, format = "%j")
        R> doy
        [1] "293"
        R> as.numeric(doy)
        [1] 293
        

        这比记住在 POSIX 标准中年日从零开始更好。

        【讨论】:

        • 刚刚遇到了我的第一个带有POSIXct 列的数据集。似乎是时候将您的答案标记为已接受的答案了。
        • @Gavin,是否也可以将日期转换为自指定数据以来的天数,例如自 2015 年 3 月 1 日以来的天数?我也可以发布一个新问题...
        • @B.Davis 你可以做类似as.numeric(Sys.Date()-as.Date('2015-03-01',format='%Y-%m-%d'))
        猜你喜欢
        • 2014-08-03
        • 2021-02-06
        • 2016-02-04
        • 2021-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-24
        相关资源
        最近更新 更多