0

我将数据集导入到 R 中,其中一个变量是日期,但它显示为 13 位数字,例如 1269576000000。如何将此数字更改为日期?我不确定格式应该是什么样的,但我猜这个数字还包含有关时间的信息(小时、分钟、秒)。是否有任何代码可以直接更改 R 中此变量的格式?

谢谢。

4

2 回答 2

8

最常见的形式是从 1970 年 1 月 1 日开始的秒数,至少 POSIX 标准是这样的。与 Simon0101 不同,我认为您应该使用as.POSIXct,因为您通常希望将此类结果粘贴在数据帧中,而 POSIXlt 对象在该环境中会变得混乱。但是,您显然是以毫秒为单位的时间:

> as.POSIXct(1269576000000, origin="1970-01-01")
[1] "42201-04-06 17:00:00 PDT"       # not a sensible result
> as.POSIXct(1269576000000/1000, origin="1970-01-01")
[1] "2010-03-26 05:00:00 PDT"

因此,它既不是小数天数也不是秒数,而是自起源以来的毫秒数。

于 2013-04-23T23:31:00.413 回答
3

您正在寻找as.POSIXlt将数字数据类型转换为自原始日期以来经过的(可能)小数天数,这就是为什么重要的是要知道哪个日期被计为第 1 天(或有时是第 0 天!)无论生成您的数据:

x <- 1269576000000
# Guessing at the origin
as.POSIXlt( x/1e3, tz="GMT", origin="1970-01-01")
[1] "2010-03-26 04:00:00 GMT"

并显示小数秒,设置选项digits.secs,即

options(digits.secs=3)
x <- 1269576000500
as.POSIXlt( x/1e3, tz="GMT", origin="1970-01-01")
[1] "2010-03-26 04:00:00.5 GMT"

可以很容易地将其添加到数据框中(我不确定为什么@DWin 认为这是一个问题):

x <- 1269576000000
x <- seq( x , by = 500 , length.out = 10 )
df <- data.frame( ID = 1:10 , Time = as.POSIXlt( x/1e3, tz="GMT", origin="1970-01-01") )
df
   ID                  Time
1   1 2010-03-26 04:00:00.0
2   2 2010-03-26 04:00:00.5
3   3 2010-03-26 04:00:01.0
4   4 2010-03-26 04:00:01.5
5   5 2010-03-26 04:00:02.0
6   6 2010-03-26 04:00:02.5
7   7 2010-03-26 04:00:03.0
8   8 2010-03-26 04:00:03.5
9   9 2010-03-26 04:00:04.0
10 10 2010-03-26 04:00:04.5
于 2013-04-23T23:22:23.063 回答