2012-03-01 11 views
8

को स्थानीयसमय से टाइमस्टैम्प परिवर्तन मेरी मशीन पर, sqldf (मैं सीएसटी, जीएमटी -0600 में हूँ) GMT/UTC से स्थानीयसमय से एक POSIXct बदल जाता है। क्या यह अपेक्षित व्यवहार है? क्या मैं आर या एसकल्डएफ को ऐसा करने से रोक सकता हूं? यहां मेरा कोड है:sqldf: GMT/यूटीसी

> library('sqldf') 
> 
> before <- data.frame(ct_sys = Sys.time()) 
> before 
       ct_sys 
1 2012-03-01 12:57:58 
> after <- sqldf('select * from before') 
> after 
       ct_sys 
1 2012-03-01 18:57:58 
> 

उत्तर

3

ऐसा लगता है कि sqldf में एक समय क्षेत्र बग है। यह (क्रैन पर अभी तक नहीं है, लेकिन आप इस तरह इसे आज़मा सकते हैं) sqldf संस्करण 0.4-6.2 में अब तय किया जाना चाहिए:

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"

+0

धन्यवाद का जोड़ा उदाहरण! Http स्रोत से पैच काम करता था, और मैं इसका उपयोग करूंगा। दूसरा एक कच्चे में कन्वर्ट किया था, लेकिन कच्चे संख्या अभी भी एक ही है कि, जब वापस POSIXct को फिर से पात्र चयन, जीएमटी में था करने के लिए बदल गया था। धन्यवाद, मैट। – mpettis

+0

सुझाएँ आप की जाँच कैसे आप इसे वापस बदल दिया। जैसा कि आप कोड में देखे गए कोड से देख सकते हैं, यह समान संख्याओं को वापस देता है। –