2010-12-06 3 views
3

Je regrette de devoir venir ici après avoir été grillé pendant des heures de recherche sur Internet concernant cette question simpliste.comment, en R, tracer l'heure du jour par rapport à la date du calendrier

J'ai plusieurs jeux de données à tracer dans R, chacun composé de deux colonnes de données: heure, date. J'utilise R 2.11.0 sur un ordinateur Windows, via le Rgui.

L'heure est l'heure à laquelle un événement est observé. À titre d'exemple, il est reconnu comme:

Factor w/ 87 levels "5:53","5:54",..: 84 85 85 85 86 ... 

La date est la date de calendrier, reconnu comme:

Class 'Date' num [1:730] 13879 13880 13881 13882 13883 ... 

Les valeurs du temps sont enregistrées au format d'une horloge de 24 h, h: mm hh: mm. Les valeurs de date sont affichées aaaa-mm-jj.

Je souhaite tracer le temps (axe des y) par rapport à la date (axe des x).

En utilisant

plot(date,time) 

donne un tracé précis prospectifs, mais l'axe y est étiquetée comme les valeurs de facteur numériques (0 à 90), plutôt que le désiré, le niveau temporellement ordonnée du facteur variable. L'axe des x est étiqueté dans le format désiré, lisible par l'homme.

Comment puis-je corriger cela? Y a-t-il un format "heure du jour" dans R que je peux convertir en ma variable "temps"? Par la suite, je voudrais aussi faire de l'arithmétique sur les valeurs de temps, et ne verrais pas d'inconvénient à devoir utiliser une colonne de valeurs à utiliser dans le traçage et une colonne de valeurs pour les mathématiques.

J'ai parcouru plusieurs exemples en ligne de manipulation de variables (date + heure) dans R, et de les convertir en différents formats. Je ne crois pas que ce soit mon problème, car j'ai des champs séparés pour l'heure et la date et je veux tracer l'un contre l'autre.

Je vous remercie d'avance pour vos suggestions, ou vos instructions pour une ressource accessible sur le Web (pas de bibliothèques ou de librairies appropriées à mon emplacement).

Répondre

1

Il peut y avoir un moyen plus facile Pour ce faire, vous pouvez toujours étiqueter l'axe des y. Ajustez le vecteur ticksAt ci-dessous pour trouver quelque chose qui ressemble à vos données.

Data <- data.frame(date=Sys.Date()+1:10,time=paste(5,41:50,sep=":")) 
with(Data, plot(date,time,yaxt="n")) 
ticksAt <- c(1,3,5,7,9) 
axis(2, at=ticksAt, labels=as.character(Data$time)[ticksAt]) 

?plot.zoo a quelques bons exemples de la façon de créer des annotations assez axe, bien que certains d'entre eux peuvent être spécifiques au zoo. ?par est également une bonne ressource.

+0

Je me demandais si le simple "étiquetage fictif" sur l'axe des y serait le moyen le plus direct pour atteindre la fin désirée. J'avais espéré qu'il y avait un moyen de tracer les valeurs de temps eux-mêmes ("5:53", "5:54", etc.), au lieu des contreparties numériques du facteur (84, 85, comme indiqué dans la question originale) ; en partie, parce que différents ensembles de données nécessiteront des annotations d'axe individualisées. Merci pour votre exemple clair et direct. Pour un travail immédiat à ce sujet, je privilégie votre forme de solution. – janus

0

ts et timeSeries sont deux bons choix.
Jetez un oeil à
Related

+0

Nous vous remercions de votre conseil. J'ai regardé certains à ce que je pourrais trouver sur ts (par exemple, http://127.0.0.1:15268/library/stats/html/plot.ts.html, http://www.stat.pitt.edu/stoffer/tsa2 /R_time_series_quick_fix.htm). J'ai l'impression que cela ne règle pas mon problème, qui est essentiellement de savoir comment étiqueter l'axe des Y en fonction des heures de la journée. (Les données semblent tracer correctement avec plot(), avec l'axe des x marqué avec les dates du calendrier.) J'ai encore besoin de regarder dans timeSeries, ainsi que les nombreux paquets à l'affichage "Related". J'apprécie vos suggestions. – janus

0

Supposons que vous avez deux vecteurs, l'un de classe Date nommée « dt » et l'autre un facteur nommé « tm »:

x <- paste(as.character(dt[1:2]), as.character(tm)) 
strptime(x, "%Y-%m-%d %H:%M") 
## [1] "2008-01-01 05:53:00" "2008-01-02 05:54:00" 
class(strptime(x, "%Y-%m-%d %H:%M")) 
## [1] "POSIXt" "POSIXlt" 
+0

La présence de variables d'heure et de date distinctes fait partie intégrante de la situation pour cette question, puisque le sujet d'intérêt étudie la façon dont les moments de la journée pour différents événements varient au cours des années civiles. J'ai peur de ne pas saisir la valeur de combiner ces deux en un seul objet, malgré la possibilité de les convertir en POSIX. – janus

+0

Plutôt que de créer votre propre fonction pour les objets temps, une classe dont je ne connais pas l'existence, je pensais que vous pouviez utiliser la TimeDateClass pour créer des différences entre une variable date-heure et une variable dérivée tronquée à minuit ou créer et auxiliaire variable dont toute la partie date a été réaffectée à une date commune. Vous pourrez alors utiliser les fonctions de formatage intégrées pour l'étiquetage de votre axe des y. –

+0

Je vois. Vous avez raison, cela pourrait être utile pour l'arithmétique avec les valeurs de temps. J'ai négligé cet avantage et j'étais toujours sur le point d'obtenir une façon directe de tracer des valeurs qui seraient reconnues et rangées comme des heures de la journée, analogue à la possibilité d'obtenir des valeurs de date seulement reconnues dans R dans une installation de base. Merci pour la redirection. – janus

Questions connexes