这似乎是sqldf中的时区错误。它现在应该是固定在sqldf版本0.4-6.2(尚未在CRAN,但你可以尝试一下这样的):
library(sqldf)
source("http://sqldf.googlecode.com/svn/trunk/R/sqldf.R")
before <- data.frame(ct_sys = Sys.time()); before
after <- sqldf('select * from before'); after
即使没有这样做,sqldf("select * from before", method = "raw")
将工作虽然将返回数值列(你可以转换为POSIXct)并可能影响其他列。以下是使用method = "raw"
的示例。请注意,在这两种情况下,我们得到1330661786.181
:
> library(sqldf)
>
> before <- data.frame(ct_sys = Sys.time()); dput(before)
structure(list(ct_sys = structure(1330661786.181, class = c("POSIXct",
"POSIXt"))), .Names = "ct_sys", row.names = c(NA, -1L), class = "data.frame")
>
> after <- sqldf('select * from before', method = "raw"); dput(after)
structure(list(ct_sys = 1330661786.181), .Names = "ct_sys", row.names = 1L, class = "data.frame")
编辑:使用method = "raw"
谢谢你的加入例子!来自http源的补丁工作,我会用它。第二个确实转换为原始数据,但原始数据仍然转换为重新转换为POSIXct时的格林威治标准时间。再次感谢,马特。 – mpettis 2012-03-02 02:31:23
建议您检查如何将其转换回来。正如你从我添加到答案的代码中可以看到的,它给出了相同的数字。 – 2012-03-02 04:20:43