【问题标题】:How do I create an empty vector of dates?如何创建一个空的日期向量?
【发布时间】:2015-06-20 19:54:46
【问题描述】:

是否可以在 r 中创建一个空的日期向量?

我可以创建一个包含整数、双精度、逻辑等的空向量:

> integer()
integer(0)
> double()
numeric(0)
> logical()
logical(0)
> length(integer())
[1] 0

但这个 meme 不适用于日期,因为 date() 返回当前系统日期和时间。那么,我将如何创建一个空的日期向量?

【问题讨论】:

标签: r vector


【解决方案1】:

使用最新版本的 R,您必须提供来源:

as.Date(x = integer(0), origin = "1970-01-01")

【讨论】:

    【解决方案2】:

    只需将一个类属性添加到一个长度为 0 的整数,它就是一个日期(如果你用解释为 R-Dates 时合理的值扩展它,至少它看起来是一个):

    >  x <- integer(0)
    > x
    integer(0)
    > class(x) <- "Date"
    > x
    character(0)
    > class(x)
    [1] "Date"
    > y <- c(x, 1400)
    > y
    [1] "1973-11-01"
    

    as.Date 的输出恰好是一个字符值,所以第一次调用有点误导。

    > as.Date(integer())
    character(0)
    > str( as.Date(integer()) )
    Class 'Date'  num(0) 
    > dput( as.Date(integer()) )
    structure(numeric(0), class = "Date")
    

    【讨论】:

    • 在我的例子中:&gt; as.Date(x = integer(0)) 返回一个错误:Error in as.Date.numeric(x = integer(0)) : 'origin' must be supplied。我必须提供原产地:as.Date(x = integer(0), origin = "1970-01-01") 有效!
    • 这不是我演示的方法,它继续成功。 as.Date(integer()) 的行为似乎已经改变。它现在返回您演示的错误。我在 NEWS 文件中找不到解释该更改的条目。
    【解决方案3】:

    使用 lubridate 包并确定您可以使用的预期格式(例如 yyyy/mm/dd):

    lubridate::ymd()
    # or
    lubridate::mdy()
    

    等等

    【讨论】:

      【解决方案4】:

      相对于其他一些答案,这似乎有效并节省了一些击键:

      > as.Date(character(0))
      Date of length 0
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-01
        • 1970-01-01
        • 2013-01-05
        • 1970-01-01
        • 1970-01-01
        • 2021-01-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多