【问题标题】:How to convert a date to YYYYDDD?如何将日期转换为 YYYYDDD?
【发布时间】:2016-10-09 03:01:23
【问题描述】:

我不知道如何将 Sys.Date() 转换为 YYYYDDD 格式的数字。其中 DDD 是一年中的某一天,即 1 月 1 日为 2016001 12 月 31 日为 2016365

Date <- Sys.Date()  ## The Variable Date is created as 2016-01-01
SomeFunction(Date)  ## Returns 2016001

【问题讨论】:

  • @katya-handler 基本上所有其他格式(日期,)函数,没有意识到 %j 存在。如果其他人存在,我很想知道,引用这个网站:link
  • as.Date 文档中的format 部分链接到strptime 的相关文档,其中列出了所有日期时间转换规范。

标签: r date datetime


【解决方案1】:

你可以只使用format函数如下:

format(Date, '%Y%j')

给出:

[1] "2016161" "2016162" "2016163"

如果您想以其他方式对其进行格式化,请参阅?strptime 了解所有可能的选项。

或者,您可以使用data.tablelubridate 包中的yearyday 函数并将它们与paste0 一起粘贴:

library(data.table) # or: library(lubridate)
paste0(year(Date), yday(Date))

这会给你同样的结果。


两个选项返回的值都是类字符。将上述解决方案包裹在as.numeric() 中即可得到实数。


使用过的数据:

> Date <- Sys.Date() + 1:3
> Date
[1] "2016-06-09" "2016-06-10" "2016-06-11"
> class(Date)
[1] "Date"

【讨论】:

  • 如此简单。非常感谢。
  • 也许是一个更深层次的问题来帮助我学习:你是如何知道 %j 存在的?我在其他任何地方都没有遇到过。
  • @LanceScadden 见?strptime
  • 这闻起来像骗子吗? :-)
  • @akrun 可能是;如果你有一个好的,继续关闭它
【解决方案2】:

这是lubridate 的一个选项:

library(lubridate)
x <- Sys.Date()
#[1] "2016-06-08"
paste0(year(x),yday(x))
#[1] "2016160"

【讨论】:

    【解决方案3】:

    这应该适用于创建具有指定日期格式的新列:

    Date <- Sys.Date    
    df$Month_Yr <- format(as.Date(df$Date), "%Y%d")
    

    但是,尤其是在处理较大的数据集时,执行以下操作会更容易:

    library(data.table)
    setDT(df)[,NewDate := format(as.Date(Date), "%Y%d"
    

    希望这会有所帮助。如果您只需要一个值并且不使用数据集,则可能需要修改。

    【讨论】:

    • @mtoto 有一个很好、简单的答案,如果只是寻找那个特定的值。
    猜你喜欢
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2011-04-14
    • 2010-11-03
    • 2020-03-19
    • 2012-08-12
    相关资源
    最近更新 更多