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
,因为t1
和t2
之间的毫秒值彼此不同。
然而,如果我现在写 as.numeric(t1)
和 as.numeric(t2)
那么我得到它们的数字 1178258694
,但是如果我改为写 as.numeric(t1) == as.numeric(t2)
那么 R 仍然输出 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)
不等于 as.numeric(t2)
?
编辑:我问的主要是因为我想使用日期时间对象的数值执行 'check' 因为与标准日期时间对象相比,R 似乎更有效地处理这些值
来自 R documentation、
Date-Time class POSIXct represents the number of seconds since the
beginning of 1970 as a numeric vector
关键部分是使用数字向量,它允许十进制表示。尝试以不同的格式打印 t1 或 t2,您将看到它是一个实际数字。
sprintf("%f", t1) #[1] "1178319893.912001"
sprintf("%f", t2) #[1] "1178319893.911001"
您在 as.numeric
中看到的只是它吐出的格式。您可以像上面一样打印 as.numeric(t1)
的结果,它也会显示小数。
我只是有点好奇 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
,因为t1
和t2
之间的毫秒值彼此不同。
然而,如果我现在写 as.numeric(t1)
和 as.numeric(t2)
那么我得到它们的数字 1178258694
,但是如果我改为写 as.numeric(t1) == as.numeric(t2)
那么 R 仍然输出 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)
不等于 as.numeric(t2)
?
编辑:我问的主要是因为我想使用日期时间对象的数值执行 'check' 因为与标准日期时间对象相比,R 似乎更有效地处理这些值
来自 R documentation、
Date-Time class POSIXct represents the number of seconds since the beginning of 1970 as a numeric vector
关键部分是使用数字向量,它允许十进制表示。尝试以不同的格式打印 t1 或 t2,您将看到它是一个实际数字。
sprintf("%f", t1) #[1] "1178319893.912001"
sprintf("%f", t2) #[1] "1178319893.911001"
您在 as.numeric
中看到的只是它吐出的格式。您可以像上面一样打印 as.numeric(t1)
的结果,它也会显示小数。