【问题标题】:R - how do I declare a vector of Date?R - 如何声明日期向量?
【发布时间】:2011-07-21 13:49:29
【问题描述】:

例如,我尝试了以下方法来创建一个长度为 5 的日期向量。无济于事:

date(5)
Date(5)
vector(5, mode = "Date" )

这可行,但想知道是否有捷径?

as.Date( numeric( 5 ) )

另外,我看到 mode( as.Date("2011-01-01" ) ) 是数字的,并且我知道日期的基础数据结构是数字的,但考虑到 vector() 只有一个模式和长度论点,在我看来,在没有强制的情况下创建 Date 的向量是不可能的?

编辑
这也是一种解决办法,除了length = 0?

Date = function( length = 0 )
{
   newDate = numeric( length )
   class(newDate) = "Date"
   return(newDate)
}

【问题讨论】:

  • 您希望序列包含什么?

标签: r


【解决方案1】:

你可以使用一个序列,或者只是添加:

R> seq( as.Date("2011-07-01"), by=1, len=3)
[1] "2011-07-01" "2011-07-02" "2011-07-03"
R> as.Date("2011-07-01") + 0:2
[1] "2011-07-01" "2011-07-02" "2011-07-03"
R> 

两者的工作方式相同很好地说明了为什么面向对象非常适合使用数据进行编程。

如您所见,日期有一个基本的数字表示(整数表示自 Unix 时间开始以来的天数,也就是 1970 年 1 月 1 日),但它也有一个类属性,它使格式、算术、. .. 表现得像使用 R 中的调度机制一样。

编辑:同理,你也可以从一个标准向量开始,然后把它变成一个Date对象:

R> x <- 1:3
R> class(x) <- "Date"
R> x
[1] "1970-01-02" "1970-01-03" "1970-01-04" 
R> 

【讨论】:

  • structure 提供了另一种方式:structure(numeric(5), class="Date")structure(1:3, class="Date")
  • @Dirk, Joshua - 谢谢!你能看看我的帖子的编辑吗?除了隐藏内置的 date() 函数之外,这个解决方案是否也有效?这个函数似乎更符合 numeric() 等。作为声明日期向量的一种方式
  • @SFun28:我会使用Date() 而不是date(),因为base::date() 存在并且类是“日期”而不是“日期”。
【解决方案2】:

用缺失的日期而不是一堆 1970-01-01s 进行初始化:

(x = structure(rep(NA_real_, 10 ), class="Date"))
# [1] NA NA NA NA NA NA NA NA NA NA
class(x)
# [1] "Date"

【讨论】:

  • 酷!你甚至可以使用 structure(rep(NA_real_, 1), class=c("POSIXct", "POSIXt")
猜你喜欢
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
相关资源
最近更新 更多