2017-04-19 1 views
1

나는 매월 및 날짜별로 필터링 할 큰 xts을 가지고 있습니다.xts 부분 집합을 더 빨리 만들 수 있습니다.

library(xts) 
junk <- xts(sample.int(101, size = 1461, replace = T), seq(as.Date('2006-01-01'), as.Date('2009-12-31'), 'days')) 
junk_sma10 = TTR::SMA(x = junk, n = 10) ## trailing 10 day avg 

지금 당장은 매일 및 매월 값을 루프를 통해 처리 할 것입니다. 나는 R이 한 번에 벡터를하는 것이 더 낫다는 것을 안다.

months_filtered <- idx_apcp30[.indexmon(junk_sma10) == 1]  ## filter for feb 
final_filtered <- months_filtered[.indexmday(months_filtered) == 15] ## filter for 16th 

출력은 일년 중 매일 고유 한 xts입니다.

  SMA 
2006-02-16 61.0 
2007-02-16 50.5 
2008-02-16 60.5 
2009-02-16 54.1 

다음 다음 반복 (+1 MDAY는) 내가 생산하는 모든이 프로세스가 생성하는 것을 XTS 저장해야

  SMA 
2006-02-17 64.3 
2007-02-17 48.4 
2008-02-17 66.1 
2009-02-17 48.6 

생산하는 것입니다. 어떻게해야 루프에서이 작업을 수행 할 수 있습니까?

나는이 같은 솔루션을 발견 :

junk[seq(as.Date('2006-01-01'),as.Date('2009-12-31'),by='year')] 

을하지만 난 여전히 당신의 XTS는 월, 일에 의해 덩어리로 객체 split

답변

1

쉬운 솔루션입니다 ... 매일 반복해야 할 것입니다 .

# if using xts < 0.10-0 (bug work-around) 
month_day <- split(junk_sma10, as.numeric(format(index(junk_sma10), "%m%d"))) 

# requires xts >= 0.10-0 
month_day <- split(junk_sma10, format(index(junk_sma10), "%m%d")) 

지금 month_day 모든 요소는 매년 월의 같은 달 같은 날 목록입니다. 그런 다음 lapply을 사용하여 각 목록 요소에서 함수를 호출하여 분석을 계속할 수 있습니다.

관련 문제