Posteriormente a mirar en diferentes repositorios y sitios finalmente hemos descubierto la solución que te mostramos más adelante.
Solución:
?month
estados:
La fecha y la hora deben ser objetos POSIXct, POSIXlt, Date, Period, chron, yearmon, yearqtr, zoo, zooreg, timeDate, xts, its, ti, jul, timeSeries y fts.
Su objeto es un factor, ni siquiera un vector de caracteres (presumiblemente debido a stringsAsFactors = TRUE
). Tienes que convertir tu vector a alguna clase de fecha y hora, por ejemplo para 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 ninguna conversión explícita:
month(some_date)
[1] 2 4
Para obtener una lista de formatos, consulte ?strptime
. Encontrará que "formato unívoco estándar" significa
Los formatos predeterminados siguen las reglas del estándar internacional ISO 8601 que expresa un día como "2001-02-28" y una hora como "14:01:02" usando ceros a la izquierda como aquí.
Sin necesidad de un paquete externo:
si su fecha está en el siguiente formato:
myDate = as.POSIXct("2013-01-01")
Luego para obtener el número de mes:
format(myDate,"%m")
Y para sacar el mes string:
format(myDate,"%B")
puede convertirlo en formato de fecha por-
new_date<- as.Date(old_date, "%m/%d/%Y")}
de new_date
puede obtener el mes por strftime()
month<- strftime(new_date, "%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"
Si eres capaz, tienes la libertad de dejar un tutorial acerca de qué le añadirías a este tutorial.