R 시계열 벡터 서브 셋팅


25

시계열이 있고 시계열로 유지하면서 시작, 끝 및 빈도를 유지하면서 부분 집합을 만들고 싶습니다.

예를 들어 시계열이 있다고 가정 해 보겠습니다.

> qs <- ts(101:110, start=c(2009, 2), frequency=4)
> qs
     Qtr1 Qtr2 Qtr3 Qtr4
2009       101  102  103
2010  104  105  106  107
2011  108  109  110     

이제 서브셋을 만들겠습니다.

> qs[time(qs) >= 2010 & time(qs) < 2011]
[1] 104 105 106 107

올바른 결과를 얻었지만 시계열 (즉, 시작, 종료, 빈도)에서 "래핑"을 잃었습니다.

이 기능을 찾고 있습니다. 시계열의 하위 집합이 일반적인 시나리오가 아닙니까? 아직 찾지 못 했으므로 다음과 같이 작성한 기능이 있습니다.

subset.ts <- function(data, start, end) {
  ks <- which(time(data) >= start & time(data) < end)
  vec <- data[ks]
  ts(vec, start=start(data) + c(0, ks[1] - 1), frequency=frequency(data))
}

개선 사항이나 더 깔끔한 방법에 대해 듣고 싶습니다. 특히 하드 코딩을 시작하고 끝내는 방식이 마음에 들지 않습니다. 오히려 사용자가 임의의 부울 조건을 지정하게하십시오.

답변:


34

window기능을 사용하십시오 :

> window(qs, 2010, c(2010, 4))
     Qtr1 Qtr2 Qtr3 Qtr4
2010  104  105  106  107

2
또한 window (qs, 2010, c (2010, 4)) <-3은 그에 따라 qs를 변경합니다.
mpiktas

6

여러 시계열을 결합하고 할 경우에도 유용에 있어야하고 싶지 window그들에 맞게 얻기 위해 모든 일, ts.union그리고 ts.intersect.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.