दुर्भाग्य से इस datetime कॉलम के आधार पर डीटी सॉर्ट करने के लिए सक्षम होने के लिए चाहते हैं जाने के लिए सबसे कारगर तरीका है क्या (कार्यकुशलता के लिए) strptime
एक POSIXlt प्रकार है, जो द्वारा असमर्थित है पैदा करता है data.table
और हमेशा इसके आकार (40 बाइट प्रति तिथि!) और संरचना के कारण होगा। हालांकि strftime
बहुत बेहतर POSIXct उत्पन्न करता है, फिर भी यह इसे POSIXlt के माध्यम से करता है। यहाँ और जानकारी:
http://stackoverflow.com/a/12788992/403310
आधार इस तरह के कार्यों as.Date
के रूप में देख रहे हैं, यह strptime
भी उपयोग करता है, एक पूर्णांक युग से ऑफसेट बनाने (विचित्र रूप से) डबल के रूप में जमा। IDate
(और दोस्तों) कक्षा data.table
में कक्षा, पूर्णांक, पूर्णांक के रूप में संग्रहीत पूर्णांक युग ऑफसेट प्राप्त करने का लक्ष्य रखती है। base::sort.list(method = "radix")
(जो वास्तव में एक गिनती प्रकार है) द्वारा तेज़ सॉर्टिंग के लिए उपयुक्त है। IDate
वास्तव में तेजी से (आमतौर पर एक बंद) रूपांतरण होने का लक्ष्य नहीं रखता है।
तो स्ट्रिंग दिनांक/समय, सही या गलत रूपांतरित करने के लिए, मैं अपना स्वयं का सहायक कार्य रोल करने लगता हूं।
यदि स्ट्रिंग दिनांक "2012-12-24"
है तो मैं as.integer(gsub("-", "", col))
की तरफ झुकता हूं और YYYYMMDD
पूर्णांक तिथियों के साथ आगे बढ़ता हूं। इसी प्रकार एक पूर्णांक के रूप में HHMMDD
हो सकता है। दो कॉलम: date
और time
अलग-अलग उपयोगी हो सकते हैं यदि आप आम तौर पर एक दिन के भीतर roll = TRUE
करना चाहते हैं, लेकिन पिछले दिन नहीं। महीने तक ग्रुपिंग सरल और तेज़ है: by = date %/% 100L
। दिनों को जोड़ना और घटाना मुश्किल है, लेकिन यह वैसे भी है क्योंकि शायद ही कभी आप कैलेंडर दिन, सप्ताहांत या व्यावसायिक दिनों को जोड़ना चाहते हैं। तो यह वैसे भी आपके व्यापार दिवस वेक्टर के लिए एक लुकअप है।
आपके मामले में चरित्र माह को 1:12
पर रूपांतरण की आवश्यकता होगी। आपकी तिथियों में एक विभाजक नहीं है "01APR2008", इसलिए substring
महीने के नाम पर match
या fmatch
के बाद एक ही तरीका होगा। क्या आप फ़ाइल प्रारूप के नियंत्रण में हैं? यदि ऐसा है, तो संख्याएं एक स्पष्ट प्रारूप में बेहतर होती हैं जो स्वाभाविक रूप से %Y-%m-%d
, या %Y%m%d
जैसी होती है।
मुझे अभी तक यह पता नहीं चला है कि fread
में यह कितना अच्छा है, इसलिए तिथि/समय वर्तमान में चरित्र के रूप में छोड़ा गया है क्योंकि मुझे अभी तक सुनिश्चित नहीं है कि दिनांक प्रारूप का पता कैसे लगाया जाए या आउटपुट किस प्रकार का पता लगाया जाए। अयोग्य चरित्र की बजाय, इसे या तो पूर्णांक या डबल तिथियों को आउटपुट करने की आवश्यकता होती है।मुझे संदेह है कि YYYYMMDD
पूर्णांक का मेरा उपयोग अपरंपरागत के रूप में देखा जाता है, इसलिए मैं इसे डिफ़ॉल्ट बनाने में थोड़ा संकोच करता हूं। उनके पास उनकी जगह है, और युग आधारित तारीखों के पेशेवर और विपक्ष भी हैं। दिनांक में है जो हमेशा युग आधारित है, जो मैं सुझाव दे रहा हूं।
आपको क्या लगता है? बीटीडब्ल्यू, fread
पर प्रोत्साहन के लिए धन्यवाद; देखना अच्छा था।
क्या आप दिखा सकते हैं कि वे आपकी डेटा फ़ाइलों को कैसे देखते हैं? – agstudy
हैलो, फ़ाइल 'सीपी = "के साथ एक सीएसवी फ़ाइल है;" 'और दिनांक प्रारूप' 01APR2008: 09: 00: 00 "जैसा दिखता है' 'प्रारूप ="% d% b% वाई:% एच: % एम:% S "'। मैंने जो किया वह 'डीटी [, दिनांक: = आईडीएट (पुराना टाइप,"% डी% बी% वाई ")]; डीटी [, समय: = आईटीम (पुराना टाइप,"% डी% बी% वाई:% एच:% एम :% एस ")] 'और अंत में' setkeyv (डीटी, सी (" तिथि "," समय "))' – statquant
तारीख आपके डेटा का पहला स्तंभ है? – agstudy