2012-03-19 32 views
9

Tôi muốn sắp xếp tên tháng. Khi tôi sử dụng hàm strptime, nó trả về lỗi vì giá trị thuộc tính chỉ chứa tên tháng. Khi tôi sử dụng hàm sort, các tháng được sắp xếp theo thứ tự bảng chữ cái.Phân loại tháng trong R

Trả lời

13

Bạn luôn có thể chuyển đổi dữ liệu của mình thành một yếu tố. Ví dụ, giả sử chúng ta có

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

sau đó chuyển đổi sang một yếu tố, ta có:

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

mà trên phân loại cho:

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

Hằng số 'month.name' và' month.abb' rất hữu ích trong vấn đề này, do đó bạn không cần phải gõ tên tháng vv. Chỉ hữu ích cho tên tháng và chữ viết tắt tiếng Anh mặc dù. –

+1

cũng, hãy cẩn thận với "Feburary" - bạn không chắc (tôi hy vọng) để tìm nó trong các dữ liệu thực tế. Có lẽ đó là một phần lý do cho đề nghị của @ GavinSimpson –

+1

Cảm ơn @GavinSimpson Tôi không biết về 'month.name' – csgillespie

3

Đây là thô nhưng nếu bạn muốn tạo một hàm để sắp xếp hoặc sắp xếp các hàng theo tháng này sẽ hoạt động:

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 một tải :) :) công việc tuyệt vời – shridatt

Các vấn đề liên quan