2014-06-19 13 views
10

मेरे पास डेटासेट है जहां time.start 5:00:00 से 28:59:59 तक भिन्न होता है (यानी 01.01.2013 28:00:00 वास्तव में 02.01.2013 04 है : 00: 00)। तिथियां %d.%m.%Y प्रारूप में हैं।05:00:00 - 28:59:59 समय प्रारूप

 Date Time.start 
01.01.2013 22:13:07 
01.01.2013 22:52:23 
01.01.2013 23:34:06 
01.01.2013 23:44:25 
01.01.2013 27:18:48 
01.01.2013 28:41:04 

मैं इसे सामान्य दिनांक प्रारूप में परिवर्तित करना चाहता हूं।

dates$date <- paste(dates$Date,dates$Time.start, sep = " ") 
dates$date <- as.POSIXct(strptime(dates$date, "%m.%d.%Y %H:%M:%S")) 

लेकिन स्पष्ट रूप से मैं समय के लिए NA> 23:59:59

मैं अपने कोड को संशोधित करना चाहिए है?

+0

मुझे याद दिलाता है समय के लिए जापानी टीवी शो के लिए है शेड्यूलिंग, जो गैर-24 घंटे का समय (उदा। "देर रात 3:00" अगले दिन 3am मतलब है)। – JAB

+0

दरअसल, आप सलाखों को विज्ञापन देखते हैं कि वे 1AM आदि के लिए "25:00" तक खुले हैं। –

+0

डेटाबेस में ऑफसेट -5 घंटे ऑफसेटिंग द्वारा सामान्यीकृत करें और जब आप वास्तव में डेटा का उपयोग करते हैं तो +5 जोड़ें। :) '[ए -5 के साथ, आप 00:00:00 - 23:59:59 रेंज में हैं।]' – CodeAngry

उत्तर

8

उदा। तारीख करने के लिए सेकंड के रूप में समय जोड़ें:

df <- read.table(header=T, text="  Date Time.start 
01.01.2013 22:13:07 
01.01.2013 22:52:23 
01.01.2013 23:34:06 
01.01.2013 23:44:25 
01.01.2013 27:18:48 
01.01.2013 28:41:04", stringsAsFactors=FALSE) 

as.POSIXct(df$Date, format="%d.%m.%Y") + 
    sapply(strsplit(df$Time.start, ":"), function(t) { 
    t <- as.integer(t) 
    t[3] + t[2] * 60 + t[1] * 60 * 60 
    }) 

# [1] "2013-01-01 22:13:07 CET" "2013-01-01 22:52:23 CET" "2013-01-01 23:34:06 CET" 
# [4] "2013-01-01 23:44:25 CET" "2013-01-02 03:18:48 CET" "2013-01-02 04:41:04 CET" 
+0

तारीखों से सीधे इनट्स में सीधे पढ़ने के लिए 'स्कैन' का उपयोग करने के बारे में कैसे। कोई strsplit और कोई जबरदस्ती नहीं। मुझे वास्तव में तुम्हारा यह विचार पसंद है। – asb

+0

आपका समाधान @akrun से तेज़ है। मेरे पास 180 000 पंक्तियों के साथ डेटा फ्रेम है और 've' कमांड – BiXiC

+0

का उपयोग करके अपने वेक्टर बनाम 31 सेकेंड बनाने में 2.5 सेकंड लगते हैं अब मुझे इस स्क्रिप्ट के लिए फ़ंक्शन के साथ समस्या है। = (http://stackoverflow.com/questions/24308718/050000-285959-time-format- समारोह – BiXiC

8

बस lukeAs समाधान के एक संशोधन:

with(df, as.POSIXct(Date, format="%d.%m.%Y")+ 
colSums(t(read.table(text=Time.start, sep=":",header=F))*c(3600,60,1))) 
[1] "2013-01-01 22:13:07 EST" "2013-01-01 22:52:23 EST" 
[3] "2013-01-01 23:34:06 EST" "2013-01-01 23:44:25 EST" 
[5] "2013-01-02 03:18:48 EST" "2013-01-02 04:41:04 EST" 
2

lubridate का उपयोग करना:

with(dates, mdy(Date) + hms(Time.start)) 

उत्पन्न करता है:

[1] "2013-01-01 22:13:07 UTC" "2013-01-01 22:52:23 UTC" 
[3] "2013-01-01 23:34:06 UTC" "2013-01-01 23:44:25 UTC" 
[5] "2013-01-02 03:18:48 UTC" "2013-01-02 04:41:04 UTC" 
संबंधित मुद्दे