Essaye ça. (Ici, nous utilisons text=Lines
pour garder l'exemple autonome, mais en réalité, nous le remplacerions par le nom du fichier.)
Lines <- "2009-01 12
2009-02 310
2009-03 2379
2009-04 234
2009-05 14
2009-08 1
2009-09 34
2009-10 2386"
library(zoo)
z <- read.zoo(text = Lines, FUN = as.yearmon)
plot(z)
L'axe X n'est pas si joli avec ces données, mais si vous avez plus de données en réalité, cela pourrait être correct ou vous pouvez utiliser le code pour un axe X sophistiqué montré dans la section des exemples de ?plot.zoo
.
La série zoo z
, qui est créée ci-dessus a un "yearmon"
index temporel et ressemble à ceci:
> z
Jan 2009 Feb 2009 Mar 2009 Apr 2009 May 2009 Aug 2009 Sep 2009 Oct 2009
12 310 2379 234 14 1 34 2386
"yearmon"
peut également être utilisé seul:
> as.yearmon("2000-03")
[1] "Mar 2000"
Remarque:
"yearmon"
les objets de classe sont triés dans l'ordre du calendrier.
Cela tracera les points mensuels à des intervalles également espacés, ce qui est probablement ce qui est souhaité; Cependant, si l'on voulait tracer les points espacés à intervalles espacés dans inégalement proportionnellement au nombre de jours dans chaque mois , puis convertir l'indice de z
la "Date"
classe: time(z) <- as.Date(time(z))
.
as.Date(month, format='%Y-%m-01')
et obtenir le même résultat. Cela me semble préférable car spécifier la même date chaque mois concerne davantage le format de la date que la manipulation de la chaîne, mais peut-être que c'est absurde.> as.Date("2016-01", format="%Y-%m-01") # [1] NA
. J'utilise R 3.3.1La solution la plus concise si vous avez besoin que les dates soient au format Date:
as.Date
fixera le premier jour de chaque mois à un objet yearmon pour vous.la source
Vous pouvez également y parvenir avec les fonctions
parse_date_time
oufast_strptime
dulubridate
-package:La différence entre ces deux éléments est que cela
parse_date_time
permet une spécification de format de style lubridate, tout enfast_strptime
exigeant la même spécification de format questrptime
.Pour spécifier le fuseau horaire, vous pouvez utiliser le
tz
-paramètre:Lorsque vous avez des irrégularités dans vos données date-heure, vous pouvez utiliser le
truncated
paramètre -pour spécifier le nombre d'irrégularités autorisées:Données utilisées:
la source
date
aideparse_date_time
, est - il possible de le voir dans un ordre différent de celui en"2009-01-01 UTC"
utilisantlubridate
package? Je préférerais voir le jour en premier dans mon ensemble de données, par exemple01-01-2009
.?format
; par exemple:format(your_date, "%d-%m-%Y")
. Il y a cependant un inconvénient à cela: vous récupérerez une valeur de personnage et non une date.format
pour la raison que vous mentionnez, je pensais qu'il pourrait y avoir un moyen d'intégrer cela dans lelubridate
package, mais il semble que ce ne soit pas le cas.Utilisation du package à tout moment :
la source
anydate("2009-03")
s'il choisit toujours le premier jour du mois.?strptime
: la chaîne d'entrée n'a pas besoin de spécifier complètement la date: il est supposé que les secondes, minutes ou heures non spécifiées sont égales à zéro et qu'une année, un mois ou un jour non spécifié est celui en cours. (Cependant, si un mois est spécifié, le jour de ce mois doit être spécifié par% d ou% e car le jour en cours du mois n'a pas besoin d'être valide pour le mois spécifié.) Il semble que la réponse de mégatron contienne un élément similaire de la documentation deas.Date
.anytime('1870-01')
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:Une solution simple serait de coller la date
"01"
à chaque date et de l'utiliserstrptime()
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 lesPOSIXlt
classes et les dates utilisent laDate
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:
Pour effectuer des opérations aux dates et heures:
Et pour traiter les dates, vous pouvez utiliser
strptime()
(en empruntant ces exemples à la page de manuel):la source
Je pense que la solution de @ ben-rollert est une bonne solution.
Vous devez juste faire attention si vous souhaitez utiliser cette solution dans une fonction à l'intérieur d'un nouveau package.
Lors du développement de packages, il est recommandé d'utiliser la syntaxe
packagename::function_name()
(voir http://kbroman.org/pkg_primer/pages/depends.html ).Dans ce cas, vous devez utiliser la version de
as.Date()
définie par lazoo
bibliothèque.Voici un exemple :
Donc, si vous développez un package, la bonne pratique est d'utiliser:
la source