Comment faire pour convertir dans les deux sens entre l'année, le mois, le jour et la date à R?
Comment faire pour convertir entre année,le mois,le jour et les dates dans la R?
Je sais on peut le faire via les chaînes, mais je préfère éviter de convertir en chaînes, en partie parce que peut-être il y a un gain de performance?, et en partie parce que je m'inquiète à propos de la régionalisation des questions, où certains de la monde utilise "année-mois-jour" et certains usages "de l'année-jour-mois".
Il ressemble ISODate fournit à la direction de l'année,le mois,le jour -> DateTime , bien qu'il ne convertit le nombre en une chaîne de caractères, donc si il y a un chemin qui ne passe pas par l'intermédiaire d'une chaîne puis je préfère.
Je ne pouvais pas trouver quelque chose qui va à l'inverse, à partir de datetimes de valeurs numériques? Je préférerais ne pas avoir à utiliser strsplit ou des choses comme ça.
Edit: juste pour être clair, ce que j'ai est un bloc de données qui ressemble à:
year month day hour somevalue
2004 1 1 1 1515353
2004 1 1 2 3513535
....
Je veux être en mesure de convertir librement à ce format:
time(hour units) somevalue
1 1515353
2 3513535
....
... et aussi être en mesure de revenir à nouveau.
Edit: pour effacer une certaine confusion sur ce que "time" (heure d'unités) signifie, en fin de compte ce que j'ai fait, et en utilisant les informations de Comment trouver la différence entre deux dates en heures de R?:
transmet direction:
lh$time <- as.numeric( difftime(ISOdate(lh$year,lh$month,lh$day,lh$hour), ISOdate(2004,1,1,0), units="hours"))
lh$year <- NULL; lh$month <- NULL; lh$day <- NULL; lh$hour <- NULL
en arrière direction:
... eh bien, je n'ai pas fait en arrière encore, mais j'imagine quelque chose comme:
- créer difftime objet de lh$l'heure (en quelque sorte...)
- ajouter ISOdate(2004,1,1,0) à difftime objet
- utiliser l'un de la solution ci-dessous pour obtenir l'année,le mois,le jour, l'heure de retour
Je suppose que, dans l'avenir, j'ai pu poser le problème exact, je suis en train de résoudre, mais j'ai essayé de factoriser mon problème spécifique générique réutilisable questions, mais peut-être que c'était une erreur?
source d'informationauteur Hugh Perkins
Vous devez vous connecter pour publier un commentaire.
Car il existe de nombreuses façons dans lesquelles un jour peut être transmis à partir de fichiers, bases de données, etc et pour la raison que vous mentionnez juste d'être écrites dans un ordre différent ou avec différents séparateurs, représentant le entré date comme une chaîne de caractères est un moyen pratique et utile. R ne s'accroche pas aux dates réelles que les chaînes et vous n'avez pas besoin de les traiter comme des chaînes de travailler avec eux.
Interne de la R est en utilisant le système d'exploitation de faire ces choses dans un façon standard. Vous n'avez pas besoin de manipuler des chaînes de caractères à tous - peut-être convertir certaines choses de caractère à leur équivalent numérique. Par exemple, il est assez facile de conclure que les deux opérations (en avant et en arrière) dans des fonctions simples que vous pouvez déployer.
Je renoncer à un seul appel à
strptime()
et suivantes fractionnement sur un caractère de séparation parce que vous n'aimez pas ce genre de manipulation.En interne R datetime code fonctionne bien et est bien testé et robuste si un peu complexe dans les lieux à cause de fuseau horaire questions etc. Je trouve l'idiome utilisé dans
toNumerics()
plus intuitif que d'avoir un jour le temps comme une liste et de rappeler quels sont les éléments de base 0. Bâtiment sur la fonctionnalité fournie semble plus facile que d'essayer d'éviter les conversions de chaînes, etc.Trouvé une solution pour aller à partir de la date de l'année,le mois,le jour.
Disons que nous avons un objet date, que nous allons créer ici, à l'aide de ISOdate:
Ensuite, nous pouvons obtenir le numérique les composants de ce comme suit:
Donne:
Alors on peut obtenir ce que l'on veut par exemple:
Notez que $année [année] - 1900, mois est basée sur 0, mday est de base 1 (conformément à la norme POSIX)
Je suis un peu en retard à la fête, mais une autre façon de convertir des entiers en date est la
lubridate::make_date
fonction. Voir l'exemple ci-dessous de la R pour la Science des Données: