2011-10-13 46 views
6

我有一個xts對象,x。我想根據索引中的時間戳運行for循環直到某個時間。從xts索引獲取時間

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

可以說,只要索引中的時間少於16:40:00,我就想運行我的循環。考慮到上面的索引格式,我如何去除時間分量?

回答

4

這應該讓你在你想成爲的球場。使用format,您只需提取小時,分鐘和秒部分。 ?strptime的幫助頁面提供了關於用於提取信息的符號的更多細節。

#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" 
+0

感謝,工作的魅力。但是有一個問題,爲了比較這個時間分量到任意時間,比如說16:00:00,我會怎麼做呢?我試過了:if(new.x> strptime(「16:00:00」,「%H:%M:%S」),但它似乎沒有選擇它,因爲new.x是一個歷史價值和新的時間有今天的日期 –

+0

@ED我想可以創建一個新的變量與附加日期,或具有您的當前變量與日期以及。 –

2

問題是時區正確。在我的系統中tz規範「SAST」是無效的,但也許你上這將是:

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

(看來是UTC +2),我收回我說一下我的系統無法識別它。

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

所以使用:

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