在R上格式化日期时遇到问题

atmip9wb  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(178)

我有以下代码和错误消息,因为我目前正在研究电力生产的时间序列(每月)。我需要第一列的格式是日期,但当我运行代码时,它变成了NA列表...有人能帮忙吗?
下面是我尝试将列日期转换为NA列表的代码:

test_4$date <- as.numeric(as.Date(test_4$date,
                                format = "%Y-%m"))

我还尝试了以下方法,因为我的日期列的类是“character”:

test_4$date <- as.Date(test_4$date,
                               format = "%Y-%m", tryFormats = c("%Y-%m-%d", "%Y/%m/%d"), optional     = FALSE)
 class(test_4$date)

看到我缺少一天,我试图添加一个没有成功,因为它返回了一个NA列表:

as.Date(paste("01", test_4$date, sep="-"), "%Y-%m-%d")

我在这里看到了关于这个问题的其他帖子,所以我尝试了以下内容:

lubridate::parse_date_time("2022-01", "Ym")

它只提供了一个日期,而不是我专栏的所有日期。我还尝试了以下方法,它可以工作,但给出了字符的月份,并且没有给出我正在搜索的格式2022-01:

library(zoo) 
 test_4$date <- as.yearmon(test_4$date, format="%Y-%m")

以下是我的数据集test_4的结构,用于重现性:

structure(list(date = c("2022-11", "2022-10", "2022-09", "2022-08", 
 "2022-07", "2022-06"), production_brute_nucleaire = c(22951.429, 
 21465.026, 19334.531, 19319.365, 19923.664, 21275.248)), row.names = c(NA, 
 6L), class = "data.frame")
ha5z0ras

ha5z0ras1#

奇怪的是,lubridate::parse_date_time()在我这边工作。但也许你只是忘记了传递test_4$date给它(而不是字符串)?您也可以使用快捷函数ym(),它是等效的,并返回日期而不是日期时间(这与您的输入数据更一致)。

d <- data.frame(
    date = c("2022-11", "2022-10", "2022-09", "2022-08", "2022-07", "2022-06"),
    production_brute_nucleaire = c(22951.429, 21465.026, 19334.531, 19319.365, 19923.664, 21275.248)
)
d$date <- ym(d$date)

date现在被解析的日期替换。请注意,由于您的日期中没有日期,因此返回的日期是该月的第一天。

# d$date is now populated with Date values.
> d$date
[1] "2022-11-01" "2022-10-01" "2022-09-01" "2022-08-01" "2022-07-01"
[6] "2022-06-01"
> str(d$date)
Date[1:6], format: "2022-11-01" "2022-10-01" "2022-09-01" "2022-08-01" "2022-07-01" ...

相关问题