2011-08-08 13 views
18

Estoy intentando escribir una función para convertir abreviaturas mes 3 letras a valores numéricos en R.Convertir una abreviatura meses a un mes numérico, en I

Esto es lo que tengo, me preguntaba si hay una mejor manera de hacer esto:

numMonth <- function(x) { 
    months <- list(jan=1,feb=2,mar=3,apr=4,may=5,jun=6,jul=7,aug=8,sep=9,oct=10,nov=11,dec=12) 
    x <- tolower(x) 
    sapply(x,function(x) months[[x]]) 
} 

numMonth(c('JAN','DEC')) 

Respuesta

31

Desde month.abb es una constante del sistema, por qué no usar:

match("jan", tolower(month.abb)) 
# [1] 1 

mo2Num <- function(x) match(tolower(x), tolower(month.abb)) 
mo2Num(c("jan", "JAN", "Feb", "junk") ) 
#[1] 1 1 2 NA 

Si desea ver el resto del número relativamente pequeño de "constantes del sistema", vaya a

`?Constants` 

El texto ejemplo implica éstos deben estar en el idioma asociado a su localidad (aunque' m no puedo decir con autoridad cuál de las configuraciones regionales sería. Un enfoque alternativo podría haber sido extraer el mes numbera después de la conversión a un objeto POSIXlt. Este enfoque requiere recordar que el número de mes está basado en 0, por lo que necesitaría agregar 1 en esta instancia.

5

uso vectorización, es decir:

numMonth<-function(x) 
c(jan=1,feb=2,mar=3,apr=4,may=5,jun=6,jul=7,aug=8,sep=9,oct=10,nov=11,dec=12)[tolower(x)] 
Cuestiones relacionadas