Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extracting time from character string with strptime() in R, returning NA

I am trying to extract out the time from a character string in R and can't stop getting NA as a result. I have tried numerous variations of the regular expression tags, but can't seem to get around this simple problem. Any help/clarifications are appreciated.

Here is my code for an example:

> x
[1] "2/7/2013 7:43"
> class(x)
[1] "character"
> z <- strptime(x, "%H:%M")
> z
[1] NA
like image 213
stokeinfo Avatar asked Feb 05 '14 18:02

stokeinfo


2 Answers

R doesn't know that your string is a datetime. So make it one first:

y <- strptime(x, format='%m/%d/%Y %H:%M')

If you were trying to get just the date, you could do:

strptime(x, '%m/%d/%Y') 

Because strptime discards any extra characters past your format string, but you cannot grab the trailing %H:%M because the function doesn't know where to start.

Once it is a proper datetime class, you can do things to it:

strftime(y, '%H:%M')

I prefer to use as.POSIXlt rather than strptime and format instead of strftime... but they are roughly equivalent.

like image 55
Justin Avatar answered Nov 15 '22 04:11

Justin


If your goal is to obtain a string with the time, you can use regular expressions in sub. If you use strptime on a string with no date information, today's date is used.

x <- "2/7/2013 7:43"

x2 <- sub(".* ", "", x)
# [1] "7:43"

strptime(x2, "%R")
# [1] "2014-02-05 07:43:00"
like image 2
Sven Hohenstein Avatar answered Nov 15 '22 05:11

Sven Hohenstein