我将数据存储在 .csv 文件中,该文件有两列:
Date mean
201001 234
201002 167
...
...
...
202005 289
(格式为 yyyymm)
我想为此创建一个时间序列图。我正在尝试使用 R 中的以下代码这样做:
library("zoo")
library("dplyr")
library("ggplot2")
library("ggfortify")
alb_mean <- read.csv("D:/Monthtest/alb_mean.csv")
View(alb_mean)
ff <- zoo(alb_mean$mean, seq(from=as.Date("201001"), to=as.Date("202005", by=1)))
它给了我以下错误: charToDate(x) 错误: 字符串不是标准的明确格式
为什么会给我这个错误?我需要更改日期格式吗?请帮助。
您的
Date
列不是 Date
对象。 as.Date("201001")
产生错误,因为 R 不知道格式是什么。你的顺序应该是:
ff <- zoo(
alb_mean$mean,
seq(from = as.Date("2010-01-01"), to = as.Date("2020-05-01"), by = "1 month")
)
但是,如果您的原始数据没有缺失月份并且按日期顺序排列,这只会为每个
mean
分配正确的值。使用 Date
列中的值更安全,附加 01
以将它们放入 "%Y%m%d"
格式:
ff <- zoo(
alb_mean$mean,
as.Date(paste0(alb_mean$Date, "01"), format = "%Y%m%d")
)
csv 表示逗号分隔值,但问题中显示的数据中没有逗号,因此我们将在最后的注释中创建一个实际的 csv 文件并使用它。首先使用
read.csv.zoo
将其读入动物园对象——如果数据采用问题中显示的格式而不是 csv,则使用 read.zoo(text = "lab_mean.csv", header = TRUE, FUN = to.ym)
代替。在任何一种情况下,将第一列转换为 yearmon 类,它代表没有一天的年和月。然后使用autoplot
绘制它。有关进一步的自定义,请参阅?autoplot.zoo
。
library(ggplot2)
library(zoo)
to.ym <- function(x) as.yearmon(as.character(x), "%Y%m")
alb_mean <- read.csv.zoo("alb_mean.csv", FUN = to.ym)
autoplot(alb_mean)
## Note
Lines <- "Date mean
201001 234
201002 167
202005 289"
Lines |>
read.table(text = _, header = TRUE) |>
write.csv("alb_mean.csv", row.names = FALSE, quote = FALSE)