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

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

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

但是当我使用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")
r date as.date
3个回答
1
投票

我们可以使用"yearmon"类来避免必须处理该月的某一天。将long.oto.yeni读入动物园对象oto,将其索引转换为类"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("")

screenshot


3
投票

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

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

1
投票

为了完整起见,一个小评论:你也可以使用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的答案相同

© www.soinside.com 2019 - 2024. All rights reserved.