2011-09-27 4 views
9

나는 타임 윈도우 기능을 적용하고자하는 불규칙한 시계열 (xts in R)을 가지고있다. 예를 들어, 다음과 같은 시계열 주어, 나는 2009-09-22 00:00:00부터 각각 분리 된 3 시간 창에서 얼마나 많은 관찰과 같은 일을 계산하려면 :불규칙한 시계열에 걸친 정규 분석

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"))) 

내가 분명히 사용할 수 없습니다 period.apply() 또는 split() 왜냐하면 그것들은 아무 관측도없는 기간을 생략 할 것이고, 나는 시작 시간을 줄 수 없다.

간단한 계산 문제 (하지만, 물론, 내 진짜 작업은 각 세그먼트 더 복잡하다!) 나는 한 번에 3 일 집계 경우이 같은 것에 대한 나의 원하는 출력 :

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 

어떤 지침을 주셔서 감사합니다.

답변

11

align.time을 사용하여 관심있는 기간에 s의 색인을 입력하십시오. 그런 다음 period.apply을 사용하여 3 시간짜리 창의 길이를 찾으십시오. 그런 다음 원하는 모든 색인 값을 가진 빈 xts 오브젝트와 병합하십시오.

# 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

내가 원했던 것을하지 않습니다. 원래 질문에 더 자세히 설명 드리겠습니다. –

+0

아마'merge()'아이디어가 필요한 것입니다. 원하는 간격 끝점을 가진 시퀀스를 만든 다음 시퀀스에 병합 하시겠습니까? –

+0

@KenWilliams : 올바른 길을 가고 있습니다. 내 대답을 업데이트했습니다 ... –

관련 문제