我需要从纪元以来的微秒值加载 POSIXlt 变量。有没有更好的方法来做到这一点:
options(digits.secs=6)
mytime=1366039619645990
as.POSIXlt(mytime %/% 1e6, tz="EST", origin="1970-01-01") + (mytime %% 1e6)/1e6
[1] "2013-04-15 10:26:59.64598 EST"
考虑到我有数百万条记录要加载,这似乎有点复杂。
最佳答案
模除法可能会产生一些舍入误差(我在我的系统上发现了这一点)。添加一小部分时间,时间最大精度的一半应该修复这个问题,尽管本质上它与您已经在做的事情没有什么不同:
as.POSIXlt( mytime/1e6 , tz="EST", origin="1970-01-01") + 5e-7
[1] "2013-04-15 10:26:59.64599 EST"
对比一下:
mytime=1366039619646000
# Produces rounding error
as.POSIXlt(mytime/1000000, tz="EST", origin="1970-01-01") + (mytime %% mytime)/1000000
[1] "2013-04-15 10:26:59.645 EST"
as.POSIXlt( mytime/1e6 , tz="EST", origin="1970-01-01") + 5e-7
[1] "2013-04-15 10:26:59.646 EST"
什么时候
mytime=1366039619645991
as.POSIXlt(mytime/1000000, tz="EST", origin="1970-01-01") + 5e-7
[1] "2013-04-15 10:26:59.645991 EST"
关于r - 如何在 R 中加载微秒精度时间序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16179104/