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