Search code examples
rdatetimestrptime

Date time conversion and extract only time


Want to change the class for Time to POSIXlt and extract only the hours minutes and seconds

str(df3$Time)
chr [1:2075259] "17:24:00" "17:25:00" "17:26:00" "17:27:00" ...

Used the strptime function

df33$Time <- strptime(df3$Time, format = "%H:%M:%S") 

This gives the date/time appended

> str(df3$Time)
 POSIXlt[1:2075259], format: "2015-08-07 17:24:00" "2015-08-07 17:25:00" "2015-08-07 17:26:00" ...

Wanted to extract just the time without changing the POSIXlt class. using the strftime function

df3$Time <- strftime(df3$Time, format = "%H:%M:%S") 

but this converts the class back to "char" -

> class(df3$Time)
[1] "character"

How can I just extract the time with class set to POSIX or numeric...


Solution

  • If your data is

    a <- "17:24:00"
    
    b <- strptime(a, format = "%H:%M:%S")
    

    you can use lubridate in order to have a result of class integer

    library(lubridate)
    hour(b)
    minute(b)
    
    # > hour(b)
    # [1] 17
    # > minute(b)
    # [1] 24
    
    
    # > class(minute(b))
    # [1] "integer"
    

    and you can combine them using

    # character
    paste(hour(b),minute(b), sep=":")
    
    # numeric
    hour(b) + minute(b)/60
    

    for instance.

    I would not advise to do that if you want to do any further operations on your data. However, it might be convenient to do that if you want to plot the results.