繁体   English   中英

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

[英]How does R store Milliseconds in a Date-Time Object?

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

例如,假设我有一个日期时间对象,如下所示:

 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)那么尽管我得到了两个日期时间对象的数字1178258694 ,但 R 仍然输出FALSE

同样,如果我使用下面的代码将其转换为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)不等于as.numeric(t2)

编辑:我主要问是因为我想使用日期时间对象的数值执行“检查”,因为与标准日期时间对象相比,R 似乎更有效地处理这些值

R 文档

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM