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?
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"
                        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")]
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With