R:在确切日期进行拆分时间序列 Intor 训练/测试



我有一个时间序列对象,其每日日期从 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)

最新更新