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

関連する問題