POSIXct /OSIXlt में वर्ण वैक्टर परिवर्तित करने के लिए .POSIXct / as.POSIXlt और strptime के बीच अंतर


93

मैंने यहां कई प्रश्नों का पालन किया है जो चरित्र वैक्टर को डेटाइम कक्षाओं में परिवर्तित करने के बारे में पूछता है। मैं अक्सर 2 तरीके देखता हूं, स्ट्रैपीम और as.POSIXct / as.POSIXlt तरीके। मैंने 2 कार्यों को देखा लेकिन स्पष्ट नहीं है कि अंतर क्या है।

strptime

function (x, format, tz = "") 
{
    y <- .Internal(strptime(as.character(x), format, tz))
    names(y$year) <- names(x)
    y
}
<bytecode: 0x045fcea8>
<environment: namespace:base>

as.POSIXct

function (x, tz = "", ...) 
UseMethod("as.POSIXct")
<bytecode: 0x069efeb8>
<environment: namespace:base>

as.POSIXlt

function (x, tz = "", ...) 
UseMethod("as.POSIXlt")
<bytecode: 0x03ac029c>
<environment: namespace:base>

प्रदर्शन अंतर हैं या नहीं, यह देखने के लिए एक माइक्रोबेनमार्क करें:

library(microbenchmark)
Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 5000, replace = TRUE)
df <- microbenchmark(strptime(Dates, "%d-%m-%Y"), as.POSIXlt(Dates, format = "%d-%m-%Y"), times = 1000)

Unit: milliseconds
                                    expr      min       lq   median       uq      max
1 as.POSIXlt(Dates, format = "%d-%m-%Y") 32.38596 33.81324 34.78487 35.52183 61.80171
2            strptime(Dates, "%d-%m-%Y") 31.73224 33.22964 34.20407 34.88167 52.12422

अकड़ थोड़ी तेज लगती है। तो क्या देता है? ऐसे ही 2 कार्य क्यों होंगे या क्या उनके बीच मतभेद हैं जो मैंने याद किए?


4
यदि आप यह देखना चाहते हैं कि कॉल करते समय as.POSIXctऔर as.POSIXltवर्ण वैक्टर पर कौन सा कोड कहा जा रहा है , तो क्रमशः देखें as.POSIXct.defaultऔर as.POSIXlt.character
जोशुआ उलरिक

जवाबों:


153

खैर, कार्य अलग-अलग चीजें करते हैं।

सबसे पहले, तिथि / समय के दो आंतरिक कार्यान्वयन हैं: POSIXctजो UNIX युग (+ कुछ अन्य डेटा) के बाद से सेकंड संग्रहीत करता है, और POSIXlt, जो दिन, महीने, वर्ष, घंटे, मिनट, दूसरे, आदि की सूची संग्रहीत करता है।

strptimeचरित्र वैक्टर (स्वरूपों की एक किस्म) को सीधे POSIXltप्रारूप में बदलने का एक कार्य है ।

as.POSIXltविभिन्न प्रकार के डेटा को रूपांतरित करता है POSIXlt। यह बुद्धिमान होने और समझदार काम करने की कोशिश करता है - चरित्र के मामले में, यह एक आवरण के रूप में कार्य करता है strptime

as.POSIXctविभिन्न प्रकार के डेटा को रूपांतरित करता है POSIXct। यह बुद्धिमान होने की कोशिश भी करता है और समझदार काम करता है - चरित्र के मामले में, यह strptimeपहले चलता है , फिर से रूपांतरण करता POSIXltहै POSIXct

यह समझ में आता है कि strptimeतेज है, क्योंकि strptimeकेवल चरित्र इनपुट को संभालता है जबकि अन्य यह निर्धारित करने की कोशिश करते हैं कि इनपुट प्रकार से किस विधि का उपयोग करना है। यह भी थोड़ा सुरक्षित होना चाहिए कि अनपेक्षित डेटा सौंपने से सिर्फ एक त्रुटि होगी, इसके बजाय उस बुद्धिमान चीज़ को करने की कोशिश करें जो वह नहीं हो सकती है जो आप चाहते हैं।


बहुत बढ़िया जवाब। क्या एक आम सहमति है जिस पर मॉडलिंग या डेटा विज़ुअलाइज़ेशन उद्देश्यों के लिए डेटा संकलन के लिए सबसे अच्छा अभ्यास है?
dre

22

दो POSIXt प्रकार, POSIXct और POSIXlt हैं। "सीटी" कैलेंडर समय के लिए खड़ा हो सकता है, यह मूल के बाद से सेकंड की संख्या संग्रहीत करता है। "लेट", या स्थानीय समय, तिथि को समय विशेषताओं (जैसे "घंटा" और "सोम") की सूची के रूप में रखता है। इन उदाहरणों की कोशिश करें:

date.hour=strptime("2011-03-27 01:30:00", "%Y-%m-%d %H:%M:%S")

date=c("26/10/2016")

time=c("19:51:30")

day<-paste(date,"T", time)

day.time1=as.POSIXct(day,format="%d/%m/%Y T %H:%M:%S",tz="Europe/Paris")

day.time1

day.time1$year

day.time2=as.POSIXlt(day,format="%d/%m/%Y T %H:%M:%S",tz="Europe/Paris")

day.time2

day.time2$year
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.