2012-03-19 14 views
9

Quiero ordenar los nombres de los meses. Cuando uso la función strptime, devuelve un error ya que los valores de los atributos solo contienen los nombres de los meses. Cuando uso la función sort, los meses se ordenan alfabéticamente.Ordenando meses en R

Respuesta

13

Siempre puede convertir sus datos a un factor. Por ejemplo, supongamos que tenemos

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

continuación, para convertir a un factor, tenemos:

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

que por clasificación da:

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

Las constantes 'month.name' y' month.abb' son útiles en este sentido, por lo que no es necesario escribir los nombres de los meses, etc. Sin embargo, solo son útiles para los nombres y abreviaturas de los meses de inglés. –

+1

también, tenga cuidado con "Feburary" - es poco probable (espero) que lo encuentre en los datos reales. Tal vez eso fue parte del motivo de la sugerencia de @ GavinSimpson –

+1

Gracias @GavinSimpson No sabía sobre 'month.name' – csgillespie

3

Ésta es crudo, pero si usted quiere hacer una función para ordenar u ordenar filas por mes esto funcionaría:

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

Gracias cargas :) :) trabajo increíble – shridatt