如何在 R 中为时间序列图输入月度数据?

问题描述 投票:0回答:2

我将数据存储在 .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) 错误: 字符串不是标准的明确格式

为什么会给我这个错误?我需要更改日期格式吗?请帮助。

r ggplot2 dplyr zoo ggfortify
2个回答
0
投票

您的

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")    
)

0
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.