2011-09-27 51 views
9

Tôi có chuỗi thời gian không thường xuyên (xts trong R) mà tôi muốn áp dụng một số cửa sổ thời gian. Ví dụ, cho một chuỗi thời gian như sau, tôi muốn để tính toán những thứ như bao nhiêu quan sát có trong mỗi cửa sổ 3 giờ rời rạc, bắt đầu từ 2009-09-22 00:00:00:Phân tích thường xuyên theo chuỗi thời gian bất thường

library(lubridate) 
s <- xts(c("OK", "Fail", "Service", "OK", "Service", "OK"), 
     ymd_hms(c("2009-09-22 07:43:30", "2009-10-01 03:50:30", 
        "2009-10-01 08:45:00", "2009-10-01 09:48:15", 
        "2009-11-11 10:30:30", "2009-11-11 11:12:45"))) 

tôi dường như không thể sử dụng period.apply() hoặc split() để làm điều đó, bởi vì những người đó sẽ bỏ qua các giai đoạn mà không có quan sát, và tôi không thể cho nó một thời gian bắt đầu.

đầu ra của tôi mong muốn cho các vấn đề đếm đơn giản (mặc dù, tất nhiên, nhiệm vụ thật của tôi là phức tạp hơn với từng phân khúc!) Sẽ là một cái gì đó như thế này nếu tôi tổng hợp 3 ngày tại một thời điểm:

2009-09-22 1 
2009-09-25 0 
2009-09-28 0 
2009-10-01 3 
2009-10-04 0 
2009-10-07 0 
2009-10-10 0 
2009-10-13 0 
2009-10-16 0 
2009-10-19 0 
2009-10-22 0 
2009-10-25 0 
2009-10-28 0 
2009-10-31 0 
2009-11-03 0 
2009-11-06 0 
2009-11-09 2 

Cảm ơn bạn đã hướng dẫn.

Trả lời

11

Sử dụng align.time để đặt chỉ mục s vào khoảng thời gian bạn quan tâm. Sau đó, sử dụng period.apply để tìm độ dài của mỗi cửa sổ 3 giờ. Sau đó hợp nhất nó với một đối tượng xts rỗng có tất cả các giá trị chỉ mục mà bạn muốn.

# align index into 3-hour blocks 
a <- align.time(s, n=60*60*3) 
# find the number of obs in each block 
count <- period.apply(a, endpoints(a, "hours", 3), length) 
# create an empty xts object with the desired index 
e <- xts(,seq(start(a),end(a),by="3 hours")) 
# merge the counts with the empty object and fill with zeros 
out <- merge(e,count,fill=0) 
+0

Điều đó không làm những gì tôi đang tìm - hãy để tôi thêm chi tiết vào câu hỏi ban đầu. –

+0

Có lẽ ý tưởng 'merge()' là những gì tôi cần - để tạo một chuỗi với các điểm cuối khoảng thời gian mong muốn của tôi, sau đó hợp nhất chuỗi đó vào chuỗi? –

+0

@KenWilliams: bạn đang đi đúng hướng. Tôi đã cập nhật câu trả lời của mình ... –

Các vấn đề liên quan