En effet, comme cela a été mentionné ci-dessus (et ailleurs sur SO), afin de convertir la chaîne en date, vous avez besoin d'une date spécifique du mois. À partir de la page de manuel as.Date()
:
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 commun consiste à supposer qu'une année, un mois ou un jour manquant est l'année en cours.Si elle spécifie une date de manière incorrecte, les implémentations fiables donneront une erreur et la date est 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 utiliser strptime()
pour indiquer le premier jour de ce mois.
Pour ceux qui recherchent un peu plus d'information sur les dates de traitement et de temps dans R:
En R, les temps utilisent POSIXct
et POSIXlt
les classes et les dates utilisent la classe Date
.
Les dates sont stockées en tant que le nombre de jours depuis le 1er Janvier 1970 et le temps sont stockés comme le 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 opérations sur les dates et heures:
plt - as.POSIXlt(d)
# Time difference of 16420.61 days
et traiter les dates, vous pouvez utiliser strptime()
(emprunter ces exemples de 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"
Quels sont les autres formats de dates? J'ai vu quelque chose avec POSIX et quelque chose avec ISO, mais je ne sais pas si ce sont des formats différents. Je pensais que ce ne sont que des fonctions, ... –
À noter que vous pouvez spécifier le jour comme étant le même dans le formateur, de sorte que vous pouvez faire 'as.Date (mois, format = '% Y-% m-01') 'et atteindre le même résultat. Ce "me semble" préférable à moi puisque spécifier la même date dans chaque mois est plus sur le format de la date que sur la manipulation de la chaîne, mais peut-être que c'est un non-sens. – JBecker
@JBecker votre suggestion ne fonctionne pas pour moi. '> as.Date (" 2016-01 ", format ="% Y-% m-01 ") # [1] NA'. J'utilise R 3.3.1 – n8sty