在不知道原点的情况下将日期设置为posixct

时间:2015-06-24 16:25:16

标签: r

我有一个以下列格式提供的日期时间:

ex <-2008123118

我正在尝试将其转换为日期时间格式。我试试:

mytime2 <- as.POSIXct(ex, format = "%Y%m%d%H")

但收到错误:

Error in as.POSIXct.numeric(ex, format = "%Y%m%d%H") : 
  'origin' must be supplied

错误似乎是直截了当的,但唯一的问题是如果我不知道原点的话。例如,我的代码的这部分将进入一个更大的代码,将处理大量的文件。

我希望我的例子能够回归:

2008-12-31 18:00

这可能吗?

3 个答案:

答案 0 :(得分:5)

有两个版本的as.POSIXct幕后工作,as.POSIXct.numericas.POSIXct.character,您试图同时调用它们。因为这个价值来自&#34;数字&#34;它传递给as.POSIXct.numeric,这实际上是错误的原因,因为as.POSIXct.numeric没有类似日期值的检测算法,也没有&#34;格式&#34;参数。将它强加给&#34;角色,一切都很好:

> ex <-2008123118
> mytime2 <- as.POSIXct(as.character(ex), format = "%Y%m%d%H")
> mytime2
[1] "2008-12-31 18:00:00 PST"

答案 1 :(得分:2)

以下是lubridate功能ymd_h的示例:

library(lubridate)
ymd_h(ex)
[1] "2008-12-31 18:00:00 UTC"

这里是基础R解决方案

strptime(ex, format = "%Y%m%d%H")
[1] "2008-12-31 18:00:00 CET"

答案 2 :(得分:0)

您可以在基础R中尝试以下代码:

> ex <-2008123118
> as.POSIXct(strptime(ex, format = "%Y%m%d%H")) #this gives you additional seconds
"2008-12-31 18:00:00 EST"
> strftime(as.POSIXct(strptime(ex, format = "%Y%m%d%H")), format = "%Y-%m-%d %H:%M") #this gives your desired format
"2008-12-31 18:00"

希望这有帮助。