2011-10-13 38 views
6

Tôi có đối tượng xts, x. Tôi muốn chạy vòng lặp for cho đến một thời điểm nhất định, dựa trên dấu thời gian trong chỉ mục.Lấy thời gian từ chỉ số xts

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

Cho phép nói rằng tôi muốn chạy vòng lặp của tôi miễn là thời gian trong chỉ mục ít hơn nói 16:40:00. Làm cách nào để loại bỏ thành phần thời gian, theo định dạng của chỉ mục ở trên?

Trả lời

4

Điều này sẽ đưa bạn vào công viên bóng nơi bạn muốn. Sử dụng format, bạn chỉ trích xuất phần giờ, phút và giây. Trang trợ giúp cho ?strptime cung cấp thêm chi tiết về các biểu tượng được sử dụng để trích xuất thông tin.

#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

cảm ơn, làm việc một nét duyên dáng. một câu hỏi, để so sánh thành phần thời gian này với thời gian tùy ý, hãy nói 16:00:00, tôi sẽ làm thế nào? Tôi đã thử: if (new.x> strptime ("16:00:00", "% H:% M:% S"), nhưng có vẻ như không nhận được, vì new.x là một lịch sử giá trị và thời gian mới có ngày hôm nay –

+0

@ED Tôi đoán có thể tạo một biến mới với ngày đính kèm, hoặc có biến hiện tại của bạn với ngày là tốt. –

2

Sự cố đang nhận được múi giờ chính xác. Trên hệ thống của tôi tz spec của "SAST" là không hợp lệ nhưng có lẽ trên của bạn nó sẽ là:

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

(. Xuất hiện được tính theo giờ UTC +2) Và tôi lấy lại những gì tôi đã nói về hệ thống của tôi không nhận ra nó .

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

Vì vậy, sử dụng:

x[ index(x) <= as.POSIXct("2011-10-12 16:44:00", tz= "Africa/Johannesburg")] 
Các vấn đề liên quan