目前,我将日期数据存储在大型data.table表的列中。日期数据类似于:
dt1 <- data.table(Person = seq(6), Date = ymd_hms(c("2007-1-1 12:31:25 PST", "2007-1-3 09:31:25 PST", "2007-1-9 15:31:22 PST", "2007-1-17 21:41:23 PST", "2007-1-30 02:04:22 PST", "2007-2-2 02:07:12 PST")))
> dt1
Person Date
1: 1 2007-01-01 12:31:25
2: 2 2007-01-03 09:31:25
3: 3 2007-01-09 15:31:22
4: 4 2007-01-17 21:41:23
5: 5 2007-01-30 02:04:22
6: 6 2007-02-02 02:07:12
ymd_hms()是包lubridate
中的一个函数。现在,当我将日期转换为数字时,我得到:
dt1[,Date:=as.numeric(Date)]
> dt1
Person Date
1: 1 1167654685
2: 2 1167816685
3: 3 1168356682
4: 4 1169070083
5: 5 1170122662
6: 6 1170382032
在此之后,我尝试了各种方法,但无法将日期转换回原始格式。谁会知道一个简单的功能?谢谢!
答案 0 :(得分:2)
我浏览了?lubridate
,但我没有看到任何提及将数字转换为POSIXct的支持。
所以,我认为你&#34;有&#34;用基础R做。
Date = ymd_hms(c("2007-1-1 12:31:25 PST", "2007-1-3 09:31:25 PST",
"2007-1-9 15:31:22 PST", "2007-1-17 21:41:23 PST",
"2007-1-30 02:04:22 PST", "2007-2-2 02:07:12 PST"))
as.numeric(Date)
#[1] 1167654685 1167816685 1168356682 1169070083 1170122662 1170382032
as.POSIXct(as.numeric(Date), origin="1970-01-01", tz="UTC")
#[1] "2007-01-01 12:31:25 UTC" "2007-01-03 09:31:25 UTC"
#[3] "2007-01-09 15:31:22 UTC" "2007-01-17 21:41:23 UTC"
#[5] "2007-01-30 02:04:22 UTC" "2007-02-02 02:07:12 UTC"
作为旁注,您的时间是在UTC中创建的,而不是&#34; PST&#34;。如果这不是您想要的,也许您打算在tz=America/Los_Angeles
电话中加入ymd_hms()
Date <- ymd_hms(c("2007-1-1 12:31:25 PST", "2007-1-3 09:31:25 PST",
"2007-1-9 15:31:22 PST", "2007-1-17 21:41:23 PST",
"2007-1-30 02:04:22 PST", "2007-2-2 02:07:12 PST"),
tz="America/Los_Angeles")
#Sys.setenv(TZ="America/Los_Angeles")
as.POSIXct(as.numeric(Date), origin="1970-01-01")
#[1] "2007-01-01 12:31:25 PST" "2007-01-03 09:31:25 PST"
#[3] "2007-01-09 15:31:22 PST" "2007-01-17 21:41:23 PST"
#[5] "2007-01-30 02:04:22 PST" "2007-02-02 02:07:12 PST"