我有一个时间序列对象,其每日日期从 2020-02-05 开始,一直到 2020-05-17 [这些是 yyyy-mm-dd 格式] 如何从中创建两个 ts 对象,其中训练数据从 2020-02-05 开始,正好在 2020-04-30 [4 月 30 日] 结束,而其余数据被推送到测试? 谢谢。
下面是一个使用quantmod
包中的股票行情数据的示例,以说明基于日期创建测试和训练数据帧。
library(quantmod)
from.dat <- as.Date("02/05/20",format="%m/%d/%y")
to.dat <- as.Date("05/17/20",format="%m/%d/%y")
AAPL <- as.data.frame(getSymbols("AAPL",from=from.dat,to=to.dat,src="yahoo",env = NULL))
AAPL$date <- as.Date(rownames(AAPL),"%Y-%m-%d")
rownames(AAPL) <- 1:nrow(AAPL)
selectIndex <- (AAPL$date <= as.Date("2020-04-30","%Y-%m-%d"))
train <- AAPL[selectIndex,]
test <- AAPL[!selectIndex,]
为了说明输出,我们将打印训练数据的头部和尾部,以及测试数据的前几行。
> # training data
> head(train)
AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted date
1 323.52 324.76 318.95 321.45 29706700 319.8232 2020-02-05
2 322.57 325.22 320.26 325.21 26356400 323.5641 2020-02-06
3 322.37 323.40 318.00 320.03 29421000 319.1660 2020-02-07
4 314.18 321.55 313.85 321.55 27337200 320.6819 2020-02-10
5 323.60 323.90 318.71 319.61 23580800 318.7471 2020-02-11
6 321.47 327.22 321.47 327.20 28432600 326.3167 2020-02-12
> tail(train)
AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted date
55 275.87 281.75 274.87 275.03 31203600 274.2875 2020-04-23
56 277.20 283.01 277.00 282.97 31627200 282.2061 2020-04-24
57 281.80 284.54 279.95 283.17 29271900 282.4055 2020-04-27
58 285.08 285.83 278.20 278.58 28001200 277.8279 2020-04-28
59 284.73 289.67 283.89 287.73 34320200 286.9532 2020-04-29
60 289.96 294.53 288.35 293.80 45766000 293.0068 2020-04-30
>
请注意,训练数据从 2 月 5 日开始,到 4 月 30 日结束。接下来,我们打印测试数据。
> # test data
> head(test)
AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted date
61 286.25 299.00 285.85 289.07 60154200 288.2896 2020-05-01
62 289.17 293.69 286.32 293.16 33392000 292.3686 2020-05-04
63 295.06 301.00 294.46 297.56 36937800 296.7567 2020-05-05
64 300.46 303.24 298.87 300.63 35583400 299.8184 2020-05-06
65 303.22 305.17 301.97 303.74 28803800 302.9200 2020-05-07
66 305.64 310.35 304.29 310.13 33512000 310.1300 2020-05-08
>
最后,我们使用as.ts()
将数据转换为时间序列对象。
# convert to ts
train_ts <- as.ts(train,start = date)
test_ts <- as.ts(test,start = date)