2017-02-15 5 views
3

특정 날짜 요구 사항을 통해 시계열을 부분 집합하는 것과 관련하여 많은 게시물을 보았지만 정수를 기준으로 부분 집합하는 방법을 알 수 없습니다. 고려하십시오 :정수에 의한 시계열 집합

# create dummy data 
data <- ts(seq_len(96), start=c(2009,1), f=12) 
# create training data 
training.set <- ts(data[1:(length(data)-8)], start=c(2009,1), frequency=12) 

# I want to remove the last 8 values (or any integer) and use that as a test set while retaining the correct dates 
test.set <- ts(data[(length(data)-8+1):length(data)]) 
test.set # start/end aren't retained for the test set 

Time Series: 
Start = 1 
End = 8 
Frequency = 1 
[1] 89 90 91 92 93 94 95 96 

테스트 세트에서 새 시작/종료 날짜를 명시 적으로 지정할 수 있지만 실제로는 사용할 수 없습니다. 내가 자동으로 그렇게 할 수있는 방법을 찾으려고 노력하고있어 입력 시간 시리즈 및 훈련과 테스트 세트 (입력 시리즈의 모든 정수 < 기반)를 기준으로 모든 날짜를 처리 할 수 ​​있습니다.

답변

0

"ts" 클래스는 일정한 간격의 시리즈 만 나타낼 수 있으므로 임의로 하위 집합을 지정할 수는 없습니다. 그러나 간격을 서브 세트 할 수 있습니다.

1) base 여기에 시간을 하위 집합으로 나누어서 window의 입력으로 사용하는 기본 솔루션이 있습니다. (간격 우리뿐만 아니라 end=를 사용했을 것이다 시리즈의 끝에서 종료하지 않았다.)

window(data, start = tail(time(data), 8)[1]) 

주는 :

 May Jun Jul Aug Sep Oct Nov Dec 
2016 89 90 91 92 93 94 95 96 

2) 동물원 우리는 직접 작업 할 수 있습니다 우리가 처음 동물원으로 변환한다면 시계열. 변환 후 집합을 다시 변환 (또는 동물원 객체로 떠나는 as.ts를 생략하고 작업) :

library(zoo) 

as.ts(tail(as.zoo(data), 8)) 

2A)은 여기에 (2)의 변형입니다 :

as.ts(as.zoo(data)[seq(to = length(data), length = 8)]) 

(2)와 (2a)는 (1)과 같은 대답을 제공합니다.

+0

위대한 작품. 또한 동물원 버전을 사용하여 교육 데이터를 쉽게 하위 집합으로 만들 수 있습니다. 매우 감사. 수락하는 – AnscombesGimlet