2016-01-25 2 views
7

मैं अपने डेटा कि इस प्रारूप में है में समय स्टाम्प, स्तंभ Timelocal है:dplyr और RPostgreSQL का उपयोग कर किसी वर्ण दिनांक समय को उपयोग करने योग्य कैसे परिवर्तित करें?

2015-08-24T00:02:03.000Z 

आम तौर पर, मैं इसे एक दिनांक स्वरूप मैं उपयोग कर सकते हैं कन्वर्ट करने के लिए इस प्रारूप परिवर्तित करने के लिए निम्न पंक्ति का उपयोग करें।

timestamp2 = "2015-08-24T00:02:03.000Z" 
timestamp2_formatted = strptime(timestamp2,"%Y-%m-%dT%H:%M:%S",tz="UTC") 
    # also works for dataframes (my main use of it) 
     df$TimeNew = strptime(df$TimeLocal,"%Y-%m-%dT%H:%M:%S",tz="UTC") 

यह मेरी मशीन पर ठीक काम करता है। समस्या यह है कि, अब मैं एक बहुत बड़ा डेटा फ्रेम के साथ काम कर रहा हूं। यह एक Redshift क्लस्टर पर है और मैं RPostgreSQL पैकेज का उपयोग कर इसे एक्सेस कर रहा हूँ। मैं डेटा को हेरफेर करने के लिए dplyr का उपयोग कर रहा हूं क्योंकि ऑनलाइन दस्तावेज इंगित करता है कि यह RPostgreSQL के साथ अच्छी तरह से खेलता है।

ऐसा लगता है कि दिनांक प्रारूप को परिवर्तित करने के अलावा। मैं चरित्र प्रारूप को एक समय प्रारूप में परिवर्तित करना चाहता हूं। Timelocal इसे Redshift में "varchar" के रूप में पढ़ा गया था। इस प्रकार, आर इसे एक चरित्र क्षेत्र के रूप में व्याख्या कर रहा है।

मैं कोशिश की है निम्नलिखित:

library(dplyr) 
library(RPostgreSQL) 
library(lubridate) 

1 कोशिश - आसान dplyr सिंटैक्स का उपयोग

mutate(elevate, timelocalnew = fast_strptime(timelocal, "%Y-%m-%dT%H:%M:%S",tz="UTC")) 

2 की कोशिश - एक और ऑनलाइन संदर्भ कोड

से dplyr सिंटैक्स का उपयोग
elevate %>% 
    mutate(timelocalnew = timelocal %>% fast_strptime("%Y-%m-%dT%H:%M:%S",tz="UTC") %>% as.character()) %>% 
    filter(!is.na(timelocalnew)) 

3 की कोशिश - fast_strptime

elevate %>% 
    mutate(timelocalnew = timelocal %>% strptime("%Y-%m-%dT%H:%M:%S",tz="UTC") %>% as.character()) %>% 
    filter(!is.na(timelocalnew)) 

के बजाय strptime का उपयोग कर मैं यहाँ से कोड अनुकूल करने के लिए कोशिश कर रहा हूँ: http://www.markhneedham.com/blog/2014/12/08/r-dplyr-mutate-with-strptime-incompatible-sizewrong-result-size/

मेरे कोशिश करता erroring रहे हैं, क्योंकि:

Error in postgresqlExecStatement(conn, statement, ...) : 
    RS-DBI driver: (could not Retrieve the result : ERROR: syntax error at or near "AS" 
LINE 1: ...CAST(STRPTIME("timelocal", '%YSuccess2048568264T%H%M�����', 'UTC' AS "tz") A... 
                  ^
) 
In addition: Warning messages: 
1: In postgresqlQuickSQL(conn, statement, ...) : 
    Could not create executeSELECT count(*) FROM (SELECT "timelocal", "timeutc", "zipcode", "otherdata", "country", CAST(STRPTIME("timelocal", '%Y%m%dT%H%M%S', 'UTC' AS "tz") AS TEXT) AS "timelocalnew" 
FROM "data") AS "master" 
2: Named arguments ignored for SQL STRPTIME 

ऐसा नहीं है कि strptime प्रतीत होता है RPostgreSQL के साथ असंगत है। क्या यह सही व्याख्या है? यदि हां, तो क्या इसका मतलब है कि आर के भीतर डेट प्रारूपों को संभालने का कोई मतलब नहीं है यदि डेटा रेडशिफ्ट पर है? मैंने RPostgreSQL पैकेज प्रलेखन की जांच की और समय स्वरूप निर्दिष्ट करने से संबंधित कुछ भी नहीं देखा।

dplyr और rpostgreSQL के साथ सही ढंग से स्वरूपित दिनांक समय कॉलम प्राप्त करने पर किसी भी सलाह की सराहना करेंगे।

उत्तर

0

क्या निम्न कार्य करता है?

as.Date(strptime(timelocal,format = "%YYYY/%MM/%DD %H:%M:%OS"),tz="UTC") 
0

पारंपरिक आर कार्य यहां काम नहीं करेंगे।
आपको SQL अनुवाद के साथ जाना चाहिए जो dplyr और dbplyr के नवीनतम संस्करणों में विकसित हो रहा है।
मेरे लिए काम किया है:

library(dbplyr) 
mutate(date = to_date(timestamp2, 'YYYY-MM-DD')) 

ध्यान दें, मैं एडब्ल्यूएस Redshift उपयोग कर रहा हूँ।

संबंधित मुद्दे