superponer - Convertir meses mmm a numérico
superponer graficas en r (4)
Me han dado un csv con una columna llamada mes como una variable char con las tres primeras letras del mes. P.ej:
"Jan", "Feb","Mar",..."Dec"
¿Hay alguna forma de convertir esto a una representación numérica del mes, del 1 al 12, o incluso de un tipo que esté en un formato de fecha?
Puede usar el vector month.abb
para verificar cuando se convierte a un número, por ejemplo:
mm <- c("Jan","Dec","jan","Mar","Apr")
sapply(mm,function(x) grep(paste("(?i)",x,sep=""),month.abb))
Jan Dec jan Mar Apr
1 12 1 3 4
El constructo grep se ocupa de las diferencias en el uso de mayúsculas. Si eso no es necesario,
match(mm,month.abb)
Funciona igual de bien.
Si también tiene una columna de día y año, puede usar cualquiera de las funciones de conversión, usando los códigos apropiados (vea también ?strftime
)
p.ej
mm <- c("Jan","Dec","jan","Mar","Apr")
year <- c(1998,1998,1999,1999,1999)
day <- c(4,10,3,16,25)
dates <- paste(year,mm,day,sep="-")
strptime(dates,format="%Y-%b-%d")
[1] "1998-01-04" "1998-12-10" "1999-01-03" "1999-03-16" "1999-04-25"
Solo añadiendo las respuestas existentes y el comentario en la pregunta:
readr::parse_date("20/DEZEMBRO/18","%d/%B/%y",locale=locale("pt"))
Formato de fecha de resultados "2018-12-20"
. locale("pt")
es para portugués, que se usa en Brasil, puede hacer "es"
para español, "fr"
para francés, etc.
Un par de opciones usando:
vec <- c("Jan","Dec","Jan","Apr")
son
> Months <- 1:12
> names(Months) <- month.abb
> unname(Months[vec])
[1] 1 12 1 4
y / o
> match(vec, month.abb)
[1] 1 12 1 4
Use match
y el vector predefinido month.abb
:
tst <- c("Jan","Mar","Dec")
match(tst,month.abb)
[1] 1 3 12