Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting hour, minutes columns in dataframe to time format

I have a dataframe containing 3 columns including minutes and hours. I want to convert these columns (namely minutes and column) to time format. Given the data in drame:

Score Hour Min
10    10    56
23    17    01

I would like to get:

Score Time
10    10:56:00
23    17:01:00
like image 624
jan5 Avatar asked Feb 20 '23 21:02

jan5


2 Answers

You could use ISOdatetime to convert the numbers in the hour and min to a POSIXct object. However, a POSIXct object is only defined when it also includes a year, month and day. So depending on your needs to can do several things:

  • If you need a real time object which is correctly printed in graphs for example and can be used in arithmetic (addition, subtraction), you need to use ISOdatetime. ISOdatetime returns a so called POSIXct object, which is an R object which represents time. Then in ISOdatetime you just use fixed values for year, month, and day. This ofcourse only works if your dataset does not span multiple years.
  • If you just need a character column Time, you can convert the POSIXct output to string using strftime. By setting the format argument to "%H:%M:00". In this case however, you could also use sprintf to create the new character column without converting to POSIXct: sprintf("%s:%s:00", drame$Hour, drame$Min).
like image 162
Paul Hiemstra Avatar answered Feb 23 '23 14:02

Paul Hiemstra


You can use paste() function to merge the two column data into a char and then use strptime() to convert to timestamp

x<-1:6  
##1 2 3 4 5 6
y<-8:13 
## 8 9 10 11 12 13

timestamp <- paste(x,":",y,":00",sep="")
timestamp

will result in

#1:8:00 2:9:00 3:10:00 4:11:00 5:12:00 6:13:00

If you prefer to convert this to timestamp object try using

strptime(mergedData,"%H:%M:%S") 
## uses current date by default

if you happen to have Date in another column use paste() to make a char formattted date and use below to get date time

##strptime(mergedData,"%d/%m/%Y %H:%M:%S")
like image 38
Arun M Avatar answered Feb 23 '23 15:02

Arun M