我有一个数据框DF
,其中Month
列为字符串,使用月份的完整英文名称,列Year
为数字:
Year Month {several xi}
2016 April {numeric}
我需要绘制几个xi作为时间序列。从最早的一个月(2015年1月)到现在,对这个数据框进行排序的最有效方法是什么?我尝试使用as.Date
将“月”转换为日期分类对象并不像我想的那样工作;他们按字母顺序排序。
道歉,如果这是一个noob问题,但纯粹是运气不好,我在R职业生涯中不经常使用日期类对象,所以我不确定我看到的各种类似问题中的哪一个帮助我。
答案 0 :(得分:0)
我同意Gregor关于使用zoo
包的建议。我认为将日期组合成一个变量是一种好习惯。如果您只需要提取有关年份或月份的信息,则可以使用lubridate
包。以下是如何使用zoo
的简单示例。
library(zoo)
#Toy Data Set
d <- data.frame( Month = c("March", "April", "May", "March"), Year = c("2008", "1998", "1997", "1999"), stringsAsFactors = FALSE)
#Generating Yearmon
d$my <- as.yearmon(paste(d$Month, d$Year))
#Ordering the data
d <- d[order(d$my), ]
确保数据框中的月份和年份变量不是因素。它们必须分别是字符和数字/整数类。
请注意,如果您打算使用ggplot
而不是plot
,那么您需要使用scale_x_yearmon()
。
最后,您提到您在as.Date
时遇到问题。正如Gregor所说,这是因为as.Date
期望一种包含日,月和年的格式。因此,在您的情况下,您可以插入任意一天来使用as.Date
。例如,as.Date(paste(d$Month, 1, d$Year), "%B %d %Y")
。有关不同日期格式的完整列表,请阅读this。