web-dev-qa-db-fra.com

Comment extraire le mois à partir de la date en R

J'utilise le package lubridate et j'applique la fonction month pour extraire le mois à partir de la date. J'ai couru la commande str sur le champ de date et je me suis

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

Voici un exemple de mon cadre de données

https://drive.google.com/file/d/0B6cqWmwsEk20Q2dHblhXZi14Wk0/edit?usp=sharing

Je ne sais pas ce que je fais mal.

23
apps92

?month États:

La date-heure doit être un objet POSIXct, POSIXlt, Date, Période, Chron, Yearmon, Yearqtr, Zoo, Zoo, TimeDate, xts, ses objets, ti, jul, timeSeries et fts.

Votre objet est un facteur, pas même un vecteur de caractère (probablement à cause de stringsAsFactors = TRUE). Vous devez convertir votre vecteur en une classe datetime, par exemple en POSIXlt:

library(lubridate)
some_date <- c("01/02/1979", "03/04/1980")
month(as.POSIXlt(some_date, format="%d/%m/%Y"))
[1] 2 4

Il y a aussi une fonction pratique dmy, qui peut faire la même chose (astuce proposée par @Henrik):

month(dmy(some_date))
[1] 2 4

Pour aller encore plus loin, @IShouldBuyABoat donne une autre indication que les formats de caractère jj/mm/aaaa sont acceptés sans diffusion explicite:

month(some_date)
[1] 2 4

Pour une liste des formats, voir ?strptime. Vous constaterez que "format standard non ambigu" signifie

Les formats par défaut suivent les règles de la norme internationale ISO 8601 qui exprime un jour "2001-02-28" et une heure "14:01:02" en utilisant des zéros non significatifs comme ici.

37
tonytonov

Sans besoin d'un paquet externe:

si votre date est dans le format suivant:

myDate = as.POSIXct("2013-01-01")

Ensuite, pour obtenir le numéro du mois:

format(myDate,"%m")

Et pour obtenir la chaîne de mois:

format(myDate,"%B")
30
RockScience

vous pouvez le convertir au format date par

new_date<- as.Date(old_date, "%m/%d/%Y")} 

à partir de new_date, vous pouvez obtenir le mois par 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"
10
Jitesh Khurana

Elle est un autre R base approche:

De votre exemple: Some date:

Some_date<-"01/01/1979"

Nous disons à R, "c'est une date"

Some_date<-as.Date(Some_date)

Nous extrayons le mois:

months(Some_date)

output: [1] "January"

Enfin, nous pouvons le convertir en une variable numérique:

as.numeric(as.factor(months(Some_date)))

outpt: [1] 1
2
Cro-Magnon