数据框按列名称排序为日期

时间:2014-04-09 13:49:44

标签: r date

我一直在努力解决这个显而易见的问题,我有一个包含以下列名的数据框:

  names <-  c("2013-1", "2013-10", "2013-11", "2013-12", "2013-2", 
"2013-3", "2013-4", "2013-5", "2013-6", "2013-7", "2013-8", "2013-9", 
"2014-1", "2014-2", "2014-3")

正如您所看到的,列名称是日期(由R识别为字符),我需要对列重新排序,以便每列对应于前一列之后的月份,例如。 2013-1,2013-2,2013-3 ......但由于R将列名称视为单词而不是日期,因此以不同的方式对其进行排序,例如2013-2之前的2013-10。

我尝试使用以下命令将列名转换为日期:

as.Date(names, format="%Y-%m")

但是R显然不承认这种日期格式而且我得到了NA。无论我尝试什么,我仍然坚持这个顺序,所以任何帮助都将非常感激。

谢谢

2 个答案:

答案 0 :(得分:2)

尝试

as.Date(paste(names, "-01", sep=""), format="%Y-%m-%d")

和R应该将其视为日期。

编辑:如果您想保留原始格式,但在1到9之间插入零,则可以使用strftime

strftime(as.Date(paste(names, "-01", sep=""), "%Y-%m-%d"), "%Y-%m")

答案 1 :(得分:2)

您还可以查看as.yearmon包中的zoo。在帮助文本中:&#34; yearmon是一个用于表示月度数据的类。&#34;

library(zoo)
x <- as.yearmon(names, format = "%Y-%m")
x

# sort and format output according to taste, e.g.
format(sort(x), "%Y-%m")
# [1] "2013-01" "2013-02" "2013-03" "2013-04" "2013-05" "2013-06" "2013-07" "2013-08" "2013-09"
# [10] "2013-10" "2013-11" "2013-12" "2014-01" "2014-02" "2014-03"