R:按两列"Year"和"Month"对数据框进行排序



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

Year Month {several xi}        
2016 April {numeric} 

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

抱歉,如果

这是一个菜鸟问题,但运气不好,在我的 R 职业生涯中,我不必经常使用日期类对象,所以我不确定我看到的各种类似问题中的哪一个可以帮助我。

我同意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") . 有关不同日期格式的完整列表,请阅读此内容。

最新更新