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.
?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.
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")
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"
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