如何将两个连接字符串变量转换为 %m%Y 格式

How to convert two concatenate string vars to %m%Y format

我创建了一个名为 long.oto.yeni$Date 的字符变量。现在我需要将此变量转换为 %m/%Y 格式以绘制 ggplot2 中的时间序列图。所以我无法使用 zoo 包中的 yearmon() 函数。

但是当我使用 as.Date() 函数时,输出创建了 NA 个值。我怎样才能克服这个问题?

谢谢。

long.oto.yeni$Date <- paste0(long.oto.yeni$Month, "/", long.oto.yeni$Year)
long.oto.yeni$Date <- as.Date(long.oto.yeni$Date, "%m/%Y")

除了月和年之外,您还需要天组件才能使用 as.Date 形成日期。您可以任意选择每个日期的第一天:

long.oto.yeni$Date <- as.Date(paste0("01-",
                              long.oto.yeni$Month, "-",
                              long.oto.yeni$Year), "%d-%m-%Y")

为了完整起见的一个小评论:您也可以使用 zoo 包,但是您需要这样 as.yearmon()as.Date() 的组合

long.oto.yeni$Date <- paste0(long.oto.yeni$Month, "/", long.oto.yeni$Year)
long.oto.yeni$Date <- as.Date(as.yearmon(long.oto.yeni$Date, "%m/%Y"))

@Dirk Eddelbuettel 提出的另一种解决方案是使用 anytime 包:

library("anytime")
long.oto.yeni$Date <- anydate(paste0(long.oto.yeni$Year, "-", long.oto.yeni$Month))

请注意,在这两种方法中,您都将获得该月的第一天,这意味着结果将与@Tim Biegeleisen 的回答相同

我们可以使用 "yearmon" class 来避免必须处理月份的日期。将 long.oto.yeni 读入动物园对象 oto 并将其索引转换为 class "yearmon"。然后用 autoplot.zoo.

绘图
library(zoo)
library(ggplot2)

long.oto.yeni <- data.frame(Month = 1:5, Year = 2000, y = (1:5)^2) # input

to_yearmon <- function(y, m) as.yearmon(paste(y, m, sep = "-"))
oto <- read.zoo(long.oto.yeni, index = c("Year", "Month"), FUN = to_yearmon)

autoplot(oto) + scale_x_yearmon() + xlab("")