मेरे पास एक्सेल में निम्नलिखित प्रारूप के साथ तिथियों का एक कॉलम है: MM/DD/YY AM या MM/DD/YY PM और readxl::read_excel के साथ आयात करने के बाद इस तिथि को पार्स करने में सक्षम था।

parse_date_time(x, '%m/%d/%y %p', tz = "UTC")

अब, यदि मैं इसके बजाय MM/DD/YY HH:MM PM लाना चाहता हूं, तो आयात एक संख्या के रूप में आता है। उदाहरण के लिए।

"3/16/20 3:00 PM" becomes 43906.625 after import.

एक समाधान दिनांक कॉलम को स्ट्रिंग के रूप में आयात करना होगा, हालांकि, मेरे पास फ़ाइल में 50 कॉलम हैं और प्रत्येक कॉलम प्रकार को हार्ड कोड नहीं करना चाहते हैं। क्या इस संख्यात्मक मान से दिनांक और समय प्राप्त करने का कोई तरीका है (यानी 43906.625)?

1
Gabriella 18 जून 2020, 20:47

1 उत्तर

सबसे बढ़िया उत्तर

एक्सेल "दिन-पूर्णांक" प्रारूप का उपयोग करता है। R समय के लिए "सेकेंड-पूर्णांक" का उपयोग करता है और Date के लिए "दिन-पूर्णांक" का उपयोग करता है, इसलिए आप किस वर्ग में परिवर्तित हो रहे हैं, इसके आधार पर आपको सेकंड के एक दिन (86,400) को समायोजित करना होगा। यह भी जानने योग्य है कि एक्सेल 1899 (वर्ष) से ​​"मूल" का उपयोग करता है।

as.POSIXct(43906.625 * 86400, origin = "1899-12-30", tz = "UTC")
# [1] "2020-03-16 15:00:00 UTC"

थोड़ा इतिहास के रूप में: कारण यह है कि यह "1899-12-30" है और नहीं, कहें "1899-12-31" (दिन का अंत?) या कुछ और 2013 से ब्लॉग पोस्ट में उल्लेख किया गया है:

विंडोज़ पर एक्सेल के लिए, 1900 के बाद की तारीखों के लिए मूल तिथि 30 दिसंबर, 1899 है। (एक्सेल के डिजाइनर ने सोचा था कि 1900 एक लीप वर्ष था, लेकिन ऐसा नहीं था।) मैक पर एक्सेल के लिए, मूल तिथि 1 जनवरी, 1904 है।

मैं इसके लिए विहित संदर्भ नहीं जानता, और जिस वेबसाइट से R-Bloggers ने उस लेख को उधार लिया/निकाल दिया वह उत्तरदायी नहीं है। मैं इस दावे के लिए अभी भी सक्रिय और अधिक-विहित संदर्भ रखना पसंद करूंगा (कि इंजीनियरों ने लीप-वर्ष की गलत पहचान की थी)।

3
r2evans 18 जून 2020, 21:29