首页 > 解决方案 > 错误帮助:无效输入:date_trans 仅适用于 Date 类的对象

问题描述

我一直在阅读这个问题的其他解决方案,但所有的修复都没有为我工作。我已将date$Date列格式化,as.Date所以我不明白为什么我仍然收到此错误。

我有一个名为的数据框data,其中包含每个月的总借方金额。数据的头部如下所示:

> head(data)
        Date Debit Amount
1 2017-04-01     17611.82
2 2017-05-01     21073.09
3 2017-06-01     18672.41
4 2017-07-01     18521.02
5 2017-08-01     21695.86
6 2017-09-01     17526.62

当我读到需要一天的时间来格式化时,我只是将它们全部作为第一个,Date所以我这样做了。然后我创建一个时间序列对象:

data_ts = ts(data$`Debit Amount`, frequency = 12, start = c(2017, 4))

接下来,我windowforecast库中使用来拆分时间序列。smpl1将用于预测并将smpl2绘制预测月份的数据:

smpl1 = window(datatimeseries, start = c(2017, 4), end = c(2019, 3))
smpl2 = window(datatimeseries, start = c(2019, 4))

HoltsWinters我一直在使用简单指数平滑的 R 网页中进行时间序列分析。然后我使用forecast,将频率设置为每月 ( h = 12)。我的代码是:

hw = HoltWinters(smpl1,
                 gamma = FALSE,
                 l.start = 17612, # Initial value
                 b.start = 3461)  # Second - initial
fc = forecast(hw, h = 12)

最后,我想用它来绘制它,ggplot2并发现它ggfortify可能需要时间序列。我还希望smpl2绘制数据并找到用于autolayer执行此操作的方法。所以我有以下内容:

autoplot(fc) +
  autolayer(smpl2, series = "Data") +
  autolayer(fc$mean, series = "Forecasts")

然后这给了我错误:

Error: Invalid input: date_trans works with objects of class Date only

我尝试的一个修复是添加 ageom_rect来格式化 x 轴,但这也给了我同样的错误:

autoplot(fc) +
  autolayer(smpl2, series = "Data") +
  autolayer(fc$mean, series = "Forecasts") +
  geom_rect(aes(xmin = as.Date("2017-04-01", "%Y-%m-%d"), 
                xmax = as.Date("2020-12-01",  "%Y-%m-%d")))

我根本不理解这个错误,因为我window在时间序列对象上使用过,在此之前data$Date使用 格式化列,使用as.Date检查:

> str(data)
'data.frame':   45 obs. of  2 variables:
 $ Date        : Date, format: "2017-04-01" "2017-05-01" "2017-06-01" "2017-07-01" ...
 $ Debit Amount: num  17612 21073 18672 18521 21696 ...

对此的任何帮助都会非常感激!

谢谢阅读。

PS我将把完整的代码块放在这里:

data_ts = ts(data$`Debit Amount`, frequency = 12, start = c(2017, 4))
smpl1 = window(datatimeseries, start = c(2017, 4), end = c(2019, 3))
smpl2 = window(datatimeseries, start = c(2019, 4))

hw = HoltWinters(smpl1,
                 gamma = FALSE,
                 l.start = 17612, # Initial value
                 b.start = 3461)  # Second - initial
fc = forecast(hw, h = 12)

autoplot(fc) +
  autolayer(smpl2, series = "Data") +
  autolayer(fc$mean, series = "Forecasts") +
  geom_rect(aes(xmin = as.Date("2017-04-01", "%Y-%m-%d"), 
                xmax = as.Date("2020-12-01",  "%Y-%m-%d")))

标签: rggplot2

解决方案


推荐阅读