带时间戳的滚动联接的最佳实践

时间:2018-10-15 17:54:52

标签: r data.table

假设我有一个带有一列时间戳字符串的R data.table(data.frame),即:

"2018-10-12 12:35:37.004226", 
"2018-10-12 12:35:38.00332", 
"2018-10-12 12:35:39.000999",...

进行滚动连接的最佳数据类型是什么?我应该将其转换为Unix纪元时间(键入数字),还是将列保持原样(键入字符)?

我的主要目标是在不同系统上输出准确相同。最初的想法是,由于数字不能精确表示,因此可能会产生不同的时间戳顺序(因此,跨不同系统的连接结果也不同)。

我现在开始理解,尽管R不能精确地表示一个数字,但它似乎确实将每个数字映射到整个系统中的一个唯一表示形式。

也就是说,

  

sprintf(“%。60f”,as.numeric(as.POSIXct(“ 2018-10-12 12:35:37.004226”,tz =“ GMT”)))

产生这种表示形式

[1] "1539347737.004225969314575195312500000000000000000000000000000000000000"

在我可以访问的四个不同系统上(取自Double precision (64-bit) representation of numeric value in R (sign, exponent, significand))。

因此,我可以肯定地说,只要一个人的时间戳所要求的精度不超过R的内部数值表示(小数点后50位数以上!),所有滚动连接都应在系统之间匹配,因为表示没有机会改变时间戳的严格顺序(从而在不同系统上产生不同的联接结果)。

因此,要在时间戳上滚动联接,请转换为数字,执行联接,并且不要回头。

对此有共识吗?

0 个答案:

没有答案