Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get time from xts index

Tags:

r

xts

I have an xts object, x. I want to run a for loop until a certain time, based on the time stamp in the index.

> index(x)
[1] "2011-10-12 16:44:00 SAST"

Lets say I want to run my loop as long as the time in the index is less than say 16:40:00. How do I strip out the time component, given the format of the index above?

like image 272
E.D. Avatar asked Oct 13 '11 06:10

E.D.


2 Answers

This should get you in the ball park of where you want to be. Using format, you extract just the hours, minutes and seconds part. Help page for ?strptime gives more details about the symbols used for extraction of information.

#if you don't have your string in an appropriate format yet
(x <- strptime("2011-10-12 16:44:00 SAST", format = "%Y-%m-%d %H:%M:%S"))
  [1] "2011-10-12 16:44:00"
class(x)
  [1] "POSIXlt" "POSIXt" 
(new.x <- format(x, format = "%H:%M:%S")) 
  [1] "16:44:00"
like image 59
Roman Luštrik Avatar answered Nov 20 '22 11:11

Roman Luštrik


The problem is getting the timezone correct. On my system the tz spec of "SAST" is not valid but perhaps on yours it will be:

x[ index(x) < as.POSIXct( "2011-10-12 16:44:00", tz= SAST") ]

(Appears to be UTC +2. ) And I take back what I said about my system not recognizing it.

 as.POSIXct( "2011-10-12 16:44:00", tz= "Africa/Johannesburg")
# [1] "2011-10-12 16:44:00 SAST"

So use:

x[ index(x) <= as.POSIXct( "2011-10-12 16:44:00", tz= "Africa/Johannesburg")]
like image 2
IRTFM Avatar answered Nov 20 '22 10:11

IRTFM