आर

2016-08-25 4 views
5

में डेटाटाइम मान से निपटने में सबसे पहले, मेरे पास एक पैरामीटर-तिथि के साथ एक बड़ा डेटा.table है, लेकिन str (date) chr है। 2015-07-01 00:15:00 आर

  • समय को सही, उदाहरण के लिए:

    date     
    2015-07-01 0:15:00 
    2015-07-01 0:30:00 
    2015-07-01 0:45:00 
    2015-07-01 0:60:00 
    2015-07-01 1:15:00 
    2015-07-01 1:30:00 
    2015-07-01 1:45:00 
    2015-07-01 1:60:00 
    

    क्या मैं करना चाहता हूँ

    • की तरह मानक प्रारूप में उन्हें बनाने है 2015-07- 01 1:60:00 -> 2015-07-01 02:00:00

    पहले के लिए, मैंने प्रारूप को रीसेट करने के लिए .POSIXct() के रूप में फ़ंक्शन का उपयोग करने का प्रयास किया, यह सही होना चाहिए, लेकिन समस्या 2015-07-01 1:60:00 जैसे डेटा के लिए है, ट्रांसफॉर्मेशन के बाद, यह सिर्फ है एनए।

    किसी के पास विचार हैं?

    dd <- data.table(date = c("2015-07-01 0:15:00", "2015-07-01 0:30:00", 
        "2015-07-01 0:45:00","2015-07-01 0:60:00", "2015-07-01 1:15:00", 
        "2015-07-01 1:30:00","2015-07-01 1:45:00","2015-07-01 1:60:00","2015-07-01 2:15:00")) 
    

    नोट:: इस तालिका सिर्फ एक दिन के लिए है और तालिका के अंतिम मूल्य

    2015-07-01 23:60:00 
    
    किसी भी स्पष्ट नहीं अंक के लिए

    है, लग रहा है

    यहाँ परीक्षण डेटा उत्पन्न करने के लिए एक कोड है मुझे बताएं कि इसके लिए धन्यवाद!

  • +1

    ,, आप 60 से अधिक मिनट है या इसे 15 में हमेशा होता है क्या 30 से 45 , 60? – akrun

    +0

    हाय, हाँ, यह हमेशा तिमाही 15,30,45 और 60 – ZAWD

    +4

    में है, मैं बस सोच रहा हूं कि इस तरह के आउटपुट का उत्पादन करने वाले कोड को किसने प्रोग्राम किया है ... वैसे भी, मुझे भरोसा है कि आपको जल्द ही एक अच्छा समाधान होगा आर – RHertel

    उत्तर

    7

    आधार आर में आप इस कोशिश कर सकते:

    df1$date <- gsub(":60:",":59:",df1$date, fixed = TRUE)  
    df1$date <- as.POSIXct(df1$date) 
    the59s <- grepl(":59:",df1$date) 
    df1$date[the59s] <- df1$date[the59s] + 60 
    #> df1 
    #     date 
    #1 2015-07-01 00:15:00 
    #2 2015-07-01 00:30:00 
    #3 2015-07-01 00:45:00 
    #4 2015-07-01 01:00:00 
    #5 2015-07-01 01:15:00 
    #6 2015-07-01 01:30:00 
    #7 2015-07-01 01:45:00 
    #8 2015-07-01 02:00:00 
    #9 2015-07-01 02:15:00 
    

    विचार POSIXct अगले एक घंटे/दिन/महीने के लिए रूपांतरण प्रदर्शन करने देने के लिए है/... एक "60 मिनट" मूल्य से शुरू हो रहा। इसके लिए हम पहले उन प्रविष्टियों की पहचान करते हैं जिनमें :60: है और उस भाग को :59: से प्रतिस्थापित करें। फिर कॉलम को एक POSIXct ऑब्जेक्ट में परिवर्तित कर दिया जाता है। इसके बाद हम उन सभी प्रविष्टियों को ढूंढते हैं जिनमें ": 59:" होता है और 60 (सेकेंड) जोड़ता है, जिससे समय/दिनांक को इच्छित प्रारूप में परिवर्तित किया जाता है।


    मामले ओपी द्वारा वर्णित में डेटा केवल तिमाही घंटे 0, 15, 30, 40, 60. एक अधिक सामान्य स्थिति वास्तविक 59 मिनट मूल्यों कि अगले एक घंटे में परिवर्तित नहीं किया जाना चाहिए शामिल हो सकते हैं मान हैं । यह तो रूपांतरण प्रदर्शन से पहले प्रासंगिक पंक्ति सूचकों स्टोर करने के लिए बेहतर होगा:

    the60s <- grepl(":60:", df1$date) 
    df1$date <- gsub(":60:",":59:",df1$date, fixed = TRUE)  
    df1$date <- as.POSIXct(df1$date) 
    df1$date[the60s] <- df1$date[the60s] + 60 
    

    डेटा:

    df1 <- structure(list(date = structure(1:9, .Label = c("2015-07-01 0:15:00", 
    "2015-07-01 0:30:00", "2015-07-01 0:45:00", "2015-07-01 0:60:00", 
    "2015-07-01 1:15:00", "2015-07-01 1:30:00", "2015-07-01 1:45:00", 
    "2015-07-01 1:60:00", "2015-07-01 2:15:00"), class = "factor")), 
    .Names = "date", row.names = c(NA, -9L), class = "data.frame")