R:按两列“年”和“月”对数据框进行排序

时间:2016-05-23 21:49:07

标签: r datetime

我有一个数据框DF,其中Month列为字符串,使用月份的完整英文名称,列Year为数字:

Year Month {several xi}        
2016 April {numeric} 

我需要绘制几个xi作为时间序列。从最早的一个月(2015年1月)到现在,对这个数据框进行排序的最有效方法是什么?我尝试使用as.Date将“月”转换为日期分类对象并不像我想的那样工作;他们按字母顺序排序。

道歉,如果这是一个noob问题,但纯粹是运气不好,我在R职业生涯中不经常使用日期类对象,所以我不确定我看到的各种类似问题中的哪一个帮助我。

1 个答案:

答案 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