2012-11-30 13 views
12

मैं एक csv जो प्रारूप में दिनांक तार के बारे में 2 लाख पंक्तियों में शामिल है:स्पीड अप रूपांतरण POSIX.ct को

2012/11/13 21:10:00 

कॉल की सुविधा देता है कि csv$Date.and.Time

मैं इन तिथियों (और उनके साथ डेटा) को जितनी जल्दी हो सके xts में परिवर्तित करना चाहते हैं

मैंने एक स्क्रिप्ट लिखी है जो रूपांतरण को ठीक करता है (नीचे देखें), लेकिन यह बहुत धीमी है और मैं इसे गति देना चाहता हूंजितना संभव हो उतना ऊपर।

यहां मेरी वर्तमान पद्धति है। क्या किसी को यह तेजी से बनाने के बारे में कोई सुझाव है?

dt <- as.POSIXct(csv$Date.and.Time,tz="UTC") 

idx <- format(dt,tz=z,usetz=TRUE) 

तो स्क्रिप्ट POSIX.ct करने के लिए इन तारीख तार बदल देता है। इसके बाद format (z का उपयोग कर एक टाइमज़ोन रूपांतरण करता है जो एक वैरिएबल है जिसे मैं परिवर्तित कर रहा हूं)। मैं फिर नियमित xts कॉल करता हूं ताकि यह एक एक्सटीएस श्रृंखला को सीएसवी में शेष डेटा के साथ बनाया जा सके।

यह 100% काम करता है। यह बहुत ही धीमा है। मैंने इसे समानांतर में चलाने की कोशिश की है (यह कुछ भी नहीं करता है; अगर कुछ भी इससे खराब हो जाता है)। 'धीमी' से मेरा क्या मतलब है?

user system elapsed 
155.246 16.430 171.650 

यह 3 जीएचजेड, 16 जीबी रैम 2012 एमबी समर्थक पर है। मैं 32GB राम के साथ एक समान प्रोसेसर पर पर करीब आधे प्राप्त कर सकते हैं एक Win7 मशीन

मुझे यकीन है कि किसी को एक बेहतर विचार है हूँ - मैं Rcpp के माध्यम से सुझाव के लिए खुले हूँ आदि हालांकि, आदर्श समाधान के साथ काम करता है किसी अन्य विधि की बजाय csv, जैसे डेटाबेस सेट करना। ऐसा कहकर, मैं यह करने के लिए कर रहा हूं कि सबसे तेज़ रूपांतरण देने के लिए कौन सी विधि जा रही है।

मैं किसी भी मदद की अत्यधिक सराहना करता हूं। अग्रिम में धन्यवाद।

+1

क्या आप जानते हैं कि एक धीमा चीजें नीचे क्या है - 'as.POSIXct' चरण,' प्रारूप 'चरण या' xts' चरण? –

+0

यदि आप फास्टटाइम की खोज करते हैं (जिसे आप डिर्क के उत्तर के बिना नहीं करना चाहते थे), तो आपको कुछ समान प्रश्न मिलेंगे [LINK1] (http://stackoverflow.com/questions/12898318/convert-character-to -डेट-जल्दी-इन-आर), [LINK2] (http://stackoverflow.com/questions/12786335/why-is-as-date-slow-on-a-character-vector) – GSee

उत्तर

18

आप साइमन द्वारा छोटे और सरल fasttime पैकेज को चाहते हैं जो इसे सबसे तेज़ संभव तरीके से करता है --- समय पार्सिंग फ़ंक्शंस को कॉल न करके, केवल सी-स्तरीय स्ट्रिंग फ़ंक्शंस का उपयोग करके।

यह strptime के रूप में कई प्रारूपों का समर्थन नहीं करता है। वास्तव में, इसमें एक प्रारूप स्ट्रिंग भी नहीं है। लेकिन अच्छी तरह से गठित आईएसओ प्रारूप प्रकार, yyyy-mm-dd hh:mm:ss.fff काम करेगा, और आपके / विभाजक भी काम कर सकते हैं।

+0

मेरे भगवान - I मैं शायद ही आश्चर्यचकित हूं कि समाधान कितना प्रभावी हो सकता है, लेकिन मैं इससे था! बहुत बहुत धन्यवाद। मैं आपको लोगों को एक चेक कहां भेजूं ?? –

+2

system.time (dts <- fastPOSIXct (csv $ date.and।समय, "यूटीसी")) उपयोगकर्ता प्रणाली 0.065 0.000 0.065 –

+0

यह आम तौर पर यह जानने में मदद करता है कि कोई क्या कर रहा है, और साइमन वास्तव में उस के लिए एक नाटक है :) –

2

lubridate का उपयोग करने का प्रयास करें - यह नियमित अभिव्यक्तियों का उपयोग करके सभी दिनांक समय पार्सिंग करता है, इसलिए न केवल यह बहुत तेज है, यह भी अधिक लचीला है।

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