2013-04-30 6 views
12

साथ POSIXct को मैं जो तीन कॉलम इस प्रकार है एक डेटा फ़ाइल है:आर - परिवर्तित करने की तारीख और समय क्षेत्रों HHMMSS प्रारूप

20010101 000000 0.833 
20010101 000500 0.814 
20010101 001000 0.794 
20010101 001500 0.772 
... 

के रूप में काफी मानव आंखों के लिए स्पष्ट है, पहले दो दिनांक और समय कर रहे हैं। मुझे उन्हें एक पॉज़िक्स में परिवर्तित करने की ज़रूरत है (या अगर यह बेहतर है तो कुछ और, लेकिन आर में टाइमस्टैम्प से निपटने का मेरा सीमित अनुभव POSIXct का उपयोग करना है)। आम तौर पर, read.table साथ में यह खींच लिया, मैं का प्रयोग करेंगे:

df$DateTime <- as.POSIXct(paste(df$Date, df$Time), format="%Y%m%d %H%M%S") 

हालांकि, दूसरे स्तंभ अपने प्रमुख शून्य कम करने के लिए लगता है, और इस तरह इसे सही ढंग से काम नहीं करता है (शायद एक प्रकार बलात्कार के माध्यम से?) ।

मैंने Combine date as integer and time as factor to POSIXct in R और Converting two columns of date and time data to one पर देखा है, लेकिन दोनों समय के साथ delimiters के साथ उपयोग कर रहे हैं:, और इसलिए एक ही समस्या नहीं है।

मैं इन कॉलम को POSIXct में कैसे परिवर्तित कर सकता हूं, कृपया?

उत्तर

16

आप बहुत करीब थे। निम्नलिखित "बस" पहले दो स्तंभों को चरित्र तारों के रूप में पढ़ने के लिए मजबूर करता है, जो प्रमुख शून्य को बचाता है।

R> df <- read.table(text="20010101 000000 0.833 
20010101 000500 0.814 
20010101 001000 0.794 
20010101 001500 0.772", 
+ header=FALSE, colClasses=c("character", "character", "numeric"), 
+ col.names=c("Date", "Time", "Val")) 
R> df 
     Date Time Val 
1 20010101 000000 0.833 
2 20010101 000500 0.814 
3 20010101 001000 0.794 
4 20010101 001500 0.772 

अब क्या आप प्रयास कर रहे थे "बस काम करता है":

R> df$DateTime <- as.POSIXct(paste(df$Date, df$Time), format="%Y%m%d %H%M%S") 
R> df 
     Date Time Val   DateTime 
1 20010101 000000 0.833 2001-01-01 00:00:00 
2 20010101 000500 0.814 2001-01-01 00:05:00 
3 20010101 001000 0.794 2001-01-01 00:10:00 
4 20010101 001500 0.772 2001-01-01 00:15:00 
R> 
3

तुम बस चरित्र के रूप में डेटा आयात करने की जरूरत है:

txt <- "Date Time value 
20010101 000000 0.833 
20010101 000500 0.814 
20010101 001000 0.794 
20010101 001500 0.772 
" 

df <- read.table(text=txt, header=TRUE, 
       colClasses=c("character", "character", "numeric")) 

df$DateTime <- as.POSIXct(paste(df$Date, df$Time), format="%Y%m%d %H%M%S") 
+0

धन्यवाद। मैं उस उत्तर को स्वीकार कर रहा हूं जो पहले आया था, लेकिन यह काफी समान है :-) – Flyto

1

, बस आप lubridate पैकेज है जो सुपर है उपयोग कर सकते हैं भयानक और तेज़। अपने उद्देश्य के लिए इसे आजमाएं:

df <- read.table(text="20010101 000000 0.833 
20010101 000500 0.814 
20010101 001000 0.794 
20010101 001500 0.772", 
        header=FALSE, colClasses=c("character", "character",  "numeric"), 
        col.names=c("Date", "Time", "Val")) 

df$mix <- paste(df$Date, df$Time) 
df$mix <- parse_date_time(df$mix, 'Ymd HMS') 

बस आपको इसे सही प्रारूप फ़ीड करना होगा। मैं इसे as.POSICct पर पसंद करता हूं क्योंकि यह अधिक लचीला है और आपके पास समय चर के साथ काम करने के लिए अन्य कार्य हैं।

संबंधित मुद्दे