2012-03-19 202 views
9

我想對月份名稱進行排序。當我使用strptime函數時,它返回一個錯誤,因爲屬性值只包含月份名稱。當我使用sort函數時,月份按字母順序排序。在R中排序月份

回答

13

您可以隨時將您的數據轉換爲一個因子。例如,假設我們有

x = c("January", "February", "March", "January") 

然後轉換到一個因素,我們有:

x_fac = factor(x, levels = month.name) 

這對排序爲:

R> sort(x_fac) 
[1] January January February March 
12 Levels: January February March April May June July August ... December 
+4

常量'month.name'和'month.abb'在這方面很有用,所以你不需要輸入月份名稱等等,只對英文月份名稱和縮寫有用。 – 2012-03-19 12:10:23

+1

另外,要小心「2月」 - 你不可能(我希望)在真實的數據中找到它。也許這是@ GavinSimpson的建議的一部分原因 – 2012-03-19 12:20:34

+1

謝謝@GavinSimpson我不知道'month.name' – csgillespie 2012-03-19 13:04:06

3

這是原油,但如果你想做一個函數來排序或排序一個月的行,這將工作:

sort.month <- function(x, dataframe = NULL, abbreviated = FALSE){ 
    y <- data.frame(m1 = month.name, m2 = month.abb, n = 1:12) 
    z <- if(abbreviated) match(x, y[, 'm2']) else match(x, y[, 'm1']) 
    x <- if(is.null(dataframe)) x else dataframe 
    h <- data.frame(z, x) 
    h[order(z), ][, -1] 
} 

#examples 
x <- sample(month.name, 20, r=T) 
a<-data.frame(y= x, k =1:20, w=letters[1:20]) 
sort.month(a$y, a) 
sort.month(a$y) 
+0

Thanx負載:) :)驚人的工作 – shridatt 2012-03-20 08:57:07