• R语言
  • autoplot加参数后无法识别日期格式的数据?

请大佬帮忙看下,谢谢~
最近在看时间序列分析,使用forecast包里的autoplot进行绘图时,加上scale_x_date(date_break = "1 days", date_labels = "%b %d")就报错。
测试的数据MA May

>raw_data<-read_xlsx("MA May.xlsx")

使用默认参数画图是正常的:

>MA_May<-xts(raw_data$Delta_Close, raw_data$Date)

加上自定义参数后就报错:

>autoplot(MA_May) + geom_abline(color = "blue") + 
scale_x_date(date_break = "1 days", date_labels = "%b %d")
Error in `transformation$transform()`:
! `transform_date()` works with objects of class <Date> only
Run `rlang::last_trace()` to see where the error occurred.

使用class查看Date列,确实读取为时间格式了啊:

> class(raw_data$Date)
[1] "POSIXct" "POSIXt" 

运行了下rlang::last_trace(),没看明白:

Backtrace:1. ├─base (local) `<fn>`(x)
  2. └─ggplot2:::print.ggplot(x)
  3.   ├─ggplot2::ggplot_build(x)
  4.   └─ggplot2:::ggplot_build.ggplot(x)
  5.     └─base::lapply(data, scales$transform_df)
  6.       └─ggplot2 (local) FUN(X[[i]], ...)
  7.         └─ggplot2 (local) transform_df(..., self = self)
  8.           ├─base::unlist(...)
  9.           └─base::lapply(scales, function(scale) scale$transform_df(df = df))
 10.             └─ggplot2 (local) FUN(X[[i]], ...)
 11.               └─scale$transform_df(df = df)
 12.                 └─ggplot2 (local) transform_df(..., self = self)
 13.                   └─base::lapply(df[aesthetics], self$transform)
 14.                     └─ggplot2 (local) FUN(X[[i]], ...)
 15.                       └─ggplot2 (local) transform(..., self = self)
 16.                         └─transformation$transform(x)
 17.                           └─cli::cli_abort("{.fun transform_date} works with objects of class {.cls Date} only")
 18.                             └─rlang::abort(...)

在R中使用transform_date()函数时遇到“works with objects of class <Date> only”的错误,通常意味着你尝试对非日期类型的对象应用了日期转换。以下是一些可能的解决方案:

  1. 确保你的日期列是Date类型:使用as.Date()函数将你的日期列转换为Date类型。例如,如果你的日期列名为Date,你可以使用以下代码:

       ulsample$Date <- as.Date(ulsample$Date, format="%Y-%m-%d")

    确保format参数与你的数据中的日期格式相匹配。

  2. 检查数据类型:使用str()函数检查你的数据框,确认日期列确实是日期格式。如果不是,你需要将其转换为日期格式。

  3. 使用scale_x_date()时的注意事项:如果你在使用ggplot2绘图时遇到这个问题,确保你的x轴变量是Date类型。如果你的日期数据实际上是字符型,你需要先将其转换为Date类型,然后再使用scale_x_date()

  4. 日期格式问题:如果你的日期数据看起来像是日期,但实际上是字符型,可能是因为日期格式不正确。确保在转换时使用正确的日期格式字符串。

  5. 使用transform_date():如果你在使用transform_date()时遇到问题,确保你传递的是Date类型的对象。这个函数专门用于处理Date类型的对象。

通过上述步骤,你应该能够解决“works with objects of class <Date> only”的错误。如果问题仍然存在,可能需要进一步检查你的数据和代码,确保所有的日期处理都是正确的。

    Sylvanas

    就是国产AI,kimi,代码类的简单问题命中率挺高的,可以优先考虑