Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert an integer column to time HH:MM

Tags:

datetime

r

I'm trying to learn R, and I'm stuck with a problem regarding the conversion of one column in a data set from integer values to time.

The aforementioned column breaks the days in 5 minute portions. Using the following format: 5 would be 00:05, 105 would be 01:05 and 1105 would be 11:05.

if I use:

strptime(activity[,"interval"],format="%H%M")

The resulting object returns "NA" for all the values that are below 1000.

Any ideas on how to make that same process using apply family would be greatly appreciated

I know this is a pretty basic question but I am not able to figure it out myself.

Thank you very much

Edit: As requested the activity[n,"interval"] column (This column has 17568 rows, comprising numbers from 5 to 2355 for several days) and the 15 first elements look like this:

activity[1:15,"interval"]
[1]   0   5  10  15  20  25  30  35  40  45  50  55 100 105 110

And should look like this

activity[1:15,"interval"]
[1]   0000   0005  0010  0015  0020  0025  0030  0035  0040  0045  
[11]  0050   0055  0100  0105  0110
like image 481
Xevi Avatar asked Aug 12 '14 19:08

Xevi


People also ask

How do I turn a column into datetime?

In Pandas, you can convert a column (string/object or integer type) to datetime using the to_datetime() and astype() methods. Furthermore, you can also specify the data type (e.g., datetime) when reading your data from an external source, such as CSV or Excel.

How do you convert columns to time format in Python?

By using pandas to_datetime() & astype() functions you can convert column to DateTime format (from String and Object to DateTime).

How do you convert HH MM to HH MM SS in Python?

Use the timedelta() constructor and pass the seconds value to it using the seconds argument. The timedelta constructor creates the timedelta object, representing time in days, hours, minutes, and seconds ( days, hh:mm:ss.ms ) format. For example, datetime.


1 Answers

Slightly modified version of @David Arenburg's code that uses sprintf (see this blog post for differences in paste and sprint: http://trinkerrstuff.wordpress.com/2013/09/15/paste-paste0-and-sprintf-2/)"

temp <- c(0 ,  5 , 10,  15  ,20 , 25  ,30  ,35,  40,  45 , 50  ,55 ,100 ,105, 110) # Your data

temp <- sprintf("%04d", temp)

##  [1] "0000" "0005" "0010" "0015" "0020" "0025" "0030" "0035"
##  [9] "0040" "0045" "0050" "0055" "0100" "0105" "0110"

format(strptime(temp, format="%H%M"), format = "%H:%M")

##  [1] "00:00" "00:05" "00:10" "00:15" "00:20" "00:25" "00:30" "00:35"
##  [9] "00:40" "00:45" "00:50" "00:55" "01:00" "01:05" "01:10"
like image 96
Tyler Rinker Avatar answered Sep 21 '22 22:09

Tyler Rinker