Estoy utilizando el paquete lubridate
y aplicando la función month
para extraer el mes de la fecha. He ejecutado el comando str en el campo de la fecha y he obtenido
Factor w/ 9498 levels "01/01/1979","01/01/1980",..: 5305 1 1 1 1 1 1 1 1 1 ...
> v1$Date<-month(v1$Date)
Error in as.POSIXlt.character(as.character(x), ...) :
character string is not in a standard unambiguous format
Aquí está un ejemplo de mi marco de datos
https://drive.google.com/file/d/0B6cqWmwsEk20Q2dHblhXZi14Wk0/edit?usp=sharing
No sé qué estoy haciendo mal.
El "mes" se declara:
Date-time debe ser un POSIXct, POSIXlt, Date, Period, chron, yearmon, yearqtr, zoo, zooreg, timeDate, xts, its, ti, jul, timeSeries, y fts objetos.
Su objeto es un factor, ni siquiera un vector de caracteres (presumiblemente debido a stringsAsFactors = TRUE
). Tienes que convertir tu vector a alguna clase datetime, por ejemplo a POSIXlt
:
library(lubridate)
some_date <- c("01/02/1979", "03/04/1980")
month(as.POSIXlt(some_date, format="%d/%m/%Y"))
[1] 2 4
También hay una función de conveniencia dmy
, que puede hacer lo mismo (consejo propuesto por @Henrik):
month(dmy(some_date))
[1] 2 4
Yendo aún más lejos, @IShouldBuyABoat da otra pista de que los formatos de caracteres dd/mm/yyyy se aceptan sin ningún casting explícito:
month(some_date)
[1] 2 4
Para ver una lista de formatos, consulte ?strptime
. Encontrará que "el formato estándar inequívoco" significa
Los formatos por defecto siguen las reglas de la norma internacional ISO 8601 estándar que expresa un día como "2001-02-28" y una hora como "14:01:02" utilizando ceros a la izquierda como aquí.
Sin necesidad de un paquete externo:
si su fecha tiene el siguiente formato:
myDate = as.POSIXct("2013-01-01")
Entonces para obtener el número del mes:
format(myDate,"%m")
Y para obtener la cadena del mes
format(myDate,"%B")
puede convertirlo en formato de fecha por-
new_date<- as.Date(old_date, "%m/%d/%Y")}
desde new_date
, puedes obtener el mes mediante strftime()
mes<- strftime(nueva_fecha, "%m")
old_date<- "01/01/1979"
new_date<- as.Date(old_date, "%m/%d/%Y")
new_date
#[1] "1979-01-01"
month<- strftime(new_date,"%m")
month
#[1] "01"
year<- strftime(new_date, "%Y")
year
#[1] "1979"