R如何在日期时间对象中存储毫秒数?

时间:2017-10-16 01:40:41

标签: r datetime xts

我对R在日期时间对象中如何存储毫秒感到有些好奇,因为当我尝试查看datetime对象的一些属性时会发生一些奇怪的事情。

让我们说比如我有一个日期时间对象如下:

 t1<- as.POSIXct("2007-05-04 16:04:53.912", format = "%Y-%m-%d %H:%M:%OS") + 1e-6

 t2<- as.POSIXct("2007-05-04 16:04:53.911", format = "%Y-%m-%d %H:%M:%OS") + 1e-6

现在,如果我要检查:

 t1 == t2

然后R输出FALSE,因为t1t2之间的毫秒值彼此不同。

但是,如果我现在写as.numeric(t1)as.numeric(t2),那么我会得到两个1178258694的数字,但如果我改为写as.numeric(t1) == as.numeric(t2),那么R仍会输出{ {1}}尽管我得到两个日期时间对象的数字FALSE

同样,如果我使用下面的代码将其转换为1178258694对象

xts

然后,如果我现在写 t3 <- c(t1,t2) v6 <- data.frame(t3,v5) v7 <- xts(v6,order.by=t3) ,我会得到完全相同的结果。

任何人都可以告诉我为什么,尽管.index(v7)[1] == .index(v7)[2]等于as.numeric(t1)1178258694等于as.numeric(t2)1178258694不等于as.numeric(t1)

编辑:我主要是因为我想进行一次检查&#39;使用日期时间对象的数值,因为与标准日期时间对象相比,R似乎更有效地使用这些值

1 个答案:

答案 0 :(得分:1)

来自R documentation

  

Date-Time类POSIXct表示自以后的秒数   1970年初作为数字向量

关键部分是使用数字向量,它允许十进制表示。尝试以不同的格式打印t1或t2,您将看到它是如何实际的数字。

sprintf("%f", t1) #[1] "1178319893.912001"
sprintf("%f", t2) #[1] "1178319893.911001"

您看到as.numeric的结果只是它吐出的格式。你可以用与上面相同的方式打印as.numeric(t1)的结果,它也会显示小数。