La conversion d'une chaîne de caractères en date dans la R
Les données que je suis en train de convertir est censé être un jour, mais il est au format jjmmaaaa avec pas de séparation par des tirets ou des barres obliques. Afin de travailler avec des dates dans R, je voudrais avoir cette formaté comme mm-jj-aaaa ou mm/jj/aaaa.
Je pense que je pourrais avoir besoin pour utiliser grep()
, mais je ne suis pas sûr de la façon de l'utiliser pour reformater toutes les dates dans le format jjmmaaaa.
as.Date("12252015", format="%m%d%Y")
Vous devez vous connecter pour publier un commentaire.
Ont un coup d'oeil à
lubridate
mdy
fonctionvous donne
de classe
"POSIXct" "POSIXt"
donc un datetime dans R. (merci Joshua Ulrich pour la correction)Vous pouvez utiliser
as.Date(mdy(a))
=1994-10-28
pour obtenir un Objet de la classeDate
.Il y a des mutations comme
ymd
etdmy
danslubridate
ainsi.Date
classé les objets sont des dates dans R.POSIXct
objets sont datetimes, pas de dates.Mis à jour: Amélioration de la avec @Richard Scriven's
colClasses
et plus simpleas.Date()
suggestionsVoici deux méthodes qui ont fonctionné pour moi, à partir d'un csv contenant
mmddyyyy
format de date, pour obtenir reconnu par R comme un objet date.En commençant d'abord avec un simple fichier tv.csv:
Méthode 1: Tout comme une chaîne de caractères
Une fois dans R,
tv.csv
comme un bloc de données nomméet
colClasses = 'character')
option, toutes les données pour être considérées comme lacharacter
type de données (au lieu d'êtreFactor
,int
types)Examiner sa structure initiale:
chr
La
chr
ou une chaîne de caractères sont alors facilement converti en un jour:as.Date()
effectue de la chaîne de conversion de date%m%d%Y
indique comment interpréter l'entrée danst$FirstAir
. Ces codes de format, au moins sur Linux, peut être trouvé à l'exécution de$ man date
ce qui amène le manuel sur ladate
programme, où il y a une liste de codes de mise en forme. Par exemple, il dit%m month (01..12)
Méthode 2: Importer ensuite corriger uniquement la date
Si pour quelque raison vous n'avez pas besoin d'une couverture de conversion de l'importation de tous les personnages, par exemple, un fichier avec de nombreuses variables et vous souhaitez laisser R de l'automobile du type de reconnaissance en cours d'utilisation, mais simplement de "fixer" une variable de date, de suivre cette méthode.
Une fois dans R,
tv.csv
comme un bloc de données nomméet
Examiner sa structure initiale:
FirstAir
variable R a importé09272015
commeint
sens entier, et déposa le premier zéro de remplissage , le 0 à 09 est important, plus tard, pour la conversion de date encore R a importé sans. Nous avons donc besoin de résoudre ce problème.Cela peut être fait en une seule commande, mais pour plus de clarté j'ai cassé en deux étapes. Tout d'abord,
sprintf
est une mise en forme de la fonction0
signifie pad avec des zéros8
moyens de s'assurer de 8 caractères, car jjmmaaaa est un total de 8 caractèresd
est utilisé lorsque l'entrée est un nombre, qui, actuellement, il est, rappelonsstr()
sortie réclamé lat$FirstAir
est unint
sens entiert$FirstAir
est la variable que nous sommes à la fois l'installation et l'utilisation comme entréeVérifier le résultat:
int
à unchr
type, par exemple9272015
est devenu"09272015"
Maintenant, c'est une chaîne ou
chr
nous ensuite de les convertir, de même que la méthode 1.Résultat
Nous faire une dernière vérification:
Dans les deux cas, quelles étaient les valeurs d'origine dans un fichier texte ont maintenant été convertis avec succès en R les objets date.
t <- read.csv("tv.csv", colClasses = "character")
. Cela définit toutes les colonnes de caractère, de sorte que vous ne perdrez pas les zéros à gauche. Ensuite, réglez la date à l'aidet$FirstAir <- as.Date(t$FirstAir, "%m%d%Y")