To wydaje się być błędem strefy czasowej w sqldf. Powinien on być naprawione w wersji 0.4-6.2 sqldf (jeszcze na CRAN ale można go wypróbować jak to):
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
Nawet nie robiąc że sqldf("select * from before", method = "raw")
będzie działać mimo, że powróci do kolumny numerycznej (które można przekonwertować do POSIXct) i może również wpływać na inne kolumny. Oto przykład użycia method = "raw"
. Należy zauważyć, że w obu przypadkach mamy 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")
EDIT: Dodano przykład użycia method = "raw"
Dzięki! Łatka ze źródła http zadziałała i wykorzystam to. Drugi konwertował na surowy, ale nieprzetworzoną liczbę nadal przekształcano na taką, która po przejściu z powrotem do POSIXct była w GMT. Jeszcze raz dziękuję, Matt. – mpettis
Sugerujemy sprawdzenie, w jaki sposób ją przekonwertowałeś. Jak widać z kodu, który dodałem do odpowiedzi, daje to identyczne numery. –