我创建了一个名为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")
答案 0 :(得分:3)
除了月份和年份,您还需要一个日期组件,以使用as.Date
形成日期。任意地,您可以选择每个日期的第一个月:
long.oto.yeni$Date <- as.Date(paste0("01-",
long.oto.yeni$Month, "-",
long.oto.yeni$Year), "%d-%m-%Y")
答案 1 :(得分: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的答案相同
答案 2 :(得分: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("")