我对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
,因为t1
和t2
之间的毫秒值彼此不同。
但是,如果我现在写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)
?
答案 0 :(得分:1)
Date-Time类POSIXct表示自以后的秒数 1970年初作为数字向量
关键部分是使用数字向量,它允许十进制表示。尝试以不同的格式打印t1或t2,您将看到它是如何实际的数字。
sprintf("%f", t1) #[1] "1178319893.912001"
sprintf("%f", t2) #[1] "1178319893.911001"
您看到as.numeric
的结果只是它吐出的格式。你可以用与上面相同的方式打印as.numeric(t1)
的结果,它也会显示小数。