ordenar - Cómo extraer mes a partir de la fecha en R
manipulacion de horas en r (4)
Estoy usando el paquete lubridate
y estoy aplicando la función del month
para extraer el mes de la fecha. Ejecuté el comando str en el campo de fecha y obtuve
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é lo que estoy haciendo mal.
Ella es otro enfoque de R base
:
De tu ejemplo: Alguna fecha:
Some_date<-"01/01/1979"
Le decimos a R: "Esa es una fecha"
Some_date<-as.Date(Some_date)
Extraemos el mes:
months(Some_date)
output: [1] "January"
Finalmente, podemos convertirlo en una variable numérica:
as.numeric(as.factor(months(Some_date)))
outpt: [1] 1
Puedes convertirlo en formato de fecha por
new_date<- as.Date(old_date, "%m/%d/%Y")}
desde new_date
, puede obtener el mes por strftime()
de 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"
?month
indica:
La fecha y la hora debe ser 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 (probablemente debido a que stringsAsFactors = TRUE
). POSIXlt
convertir su vector a alguna clase de fecha y hora, 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 (sugerencia propuesta 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 / aaaa son aceptados sin ningún tipo de conversión explícita:
month(some_date)
[1] 2 4
Para obtener una lista de formatos, consulte ?strptime
. Encontrará que "formato estándar no ambiguo" significa
Los formatos predeterminados siguen las reglas de la norma internacional ISO 8601 que expresa un día como "2001-02-28" y una hora como "14:01:02" usando los ceros iniciales como aquí.
Sin la 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 del mes:
format(myDate,"%m")
Y para obtener la cadena del mes:
format(myDate,"%B")