2014-04-09 62 views
1

我一直在努力解決這個顯然簡單的問題,我有以下的列名的數據幀:數據幀

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 - 2013年之前。

我試圖將列名轉換爲使用日期:

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

但顯然[R無法識別此日期格式和我NA的。無論我嘗試什麼,我仍然堅持這種訂購,所以任何幫助將非常感激。

謝謝

回答

2

您也可以在zoo包一看as.yearmon。從幫助文本:「yearmon是代表每月數據的類。」

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" 
+0

謝謝,選擇它作爲答案,因爲解決我的問題更快,更清潔。 – RabidHealer

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") 
+0

它的工作原理,但並不完全如我所願。手動添加日期意味着R無法理解yyyy-mm日期格式?如果可能的話,我寧願保留原始格式。 – RabidHealer