En effet, comme cela a été mentionné ci-dessus (et ailleurs sur SO), pour convertir la chaîne en une date, vous avez besoin d'une date précise du mois. Depuis la as.Date()
page de manuel:
Si la chaîne de date ne spécifie pas complètement la date, la réponse renvoyée peut être spécifique au système. Le comportement le plus courant consiste à supposer qu'une année, un mois ou un jour manquant est celui en cours. Si elle spécifie une date de manière incorrecte, des implémentations fiables donneront une erreur et la date sera signalée comme NA. Malheureusement, certaines implémentations courantes (telles que glibc
) ne sont pas fiables et devinent la signification voulue.
Une solution simple serait de coller la date "01"
à chaque date et de l'utiliser strptime()
pour l'indiquer comme premier jour de ce mois.
Pour ceux qui recherchent un peu plus d'informations sur les dates et heures de traitement en R:
Dans R, les heures utilisent POSIXct
et les POSIXlt
classes et les dates utilisent la Date
classe.
Les dates sont enregistrées en nombre de jours depuis le 1er janvier 1970 et les heures en nombre de secondes depuis le 1er janvier 1970.
Ainsi, par exemple:
d <- as.Date("1971-01-01")
unclass(d) # one year after 1970-01-01
# [1] 365
pct <- Sys.time() # in POSIXct
unclass(pct) # number of seconds since 1970-01-01
# [1] 1450276559
plt <- as.POSIXlt(pct)
up <- unclass(plt) # up is now a list containing the components of time
names(up)
# [1] "sec" "min" "hour" "mday" "mon" "year" "wday" "yday" "isdst" "zone"
# [11] "gmtoff"
up$hour
# [1] 9
Pour effectuer des opérations aux dates et heures:
plt - as.POSIXlt(d)
# Time difference of 16420.61 days
Et pour traiter les dates, vous pouvez utiliser strptime()
(en empruntant ces exemples à la page de manuel):
strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS")
# [1] "2006-02-20 11:16:16 EST"
# And in vectorized form:
dates <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
strptime(dates, "%d%b%Y")
# [1] "1960-01-01 EST" "1960-01-02 EST" "1960-03-31 EST" "1960-07-30 EDT"