Question:
Existe-t-il un moyen de spécifier le format de date lors de l'utilisation de l'argument colClasses dans read.table / read.csv?
(Je me rends compte que je peux convertir après l'importation, mais avec de nombreuses colonnes de date comme celle-ci, ce serait plus facile de le faire à l'étape d'importation)
Exemple:
J'ai un .csv avec des colonnes de date au format %d/%m/%Y
.
dataImport <- read.csv("data.csv", colClasses = c("factor","factor","Date"))
Cela entraîne une erreur de conversion. Par exemple, 15/07/2008
devient 0015-07-20
.
Code reproductible:
data <-
structure(list(func_loc = structure(c(1L, 2L, 3L, 3L, 3L, 3L,
3L, 4L, 4L, 5L), .Label = c("3076WAG0003", "3076WAG0004", "3076WAG0007",
"3076WAG0009", "3076WAG0010"), class = "factor"), order_type = structure(c(3L,
3L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 1L), .Label = c("PM01", "PM02",
"PM03"), class = "factor"), actual_finish = structure(c(4L, 6L,
1L, 2L, 3L, 7L, 1L, 8L, 1L, 5L), .Label = c("", "11/03/2008",
"14/08/2008", "15/07/2008", "17/03/2008", "19/01/2009", "22/09/2008",
"6/09/2007"), class = "factor")), .Names = c("func_loc", "order_type",
"actual_finish"), row.names = c(NA, 10L), class = "data.frame")
write.csv(data,"data.csv", row.names = F)
dataImport <- read.csv("data.csv")
str(dataImport)
dataImport
dataImport <- read.csv("data.csv", colClasses = c("factor","factor","Date"))
str(dataImport)
dataImport
Et voici à quoi ressemble la sortie:
r
date
read.table
read.csv
Tommy O'Dell
la source
la source
read.table
et d'ajouter unformat
argument qui est transmis àas.Date
. Je ne serais pas surpris s'il existe une meilleure façon de ne pas penser.Réponses:
Vous pouvez écrire votre propre fonction qui accepte une chaîne et la convertit en date en utilisant le format souhaité, puis utilisez le
setAs
pour la définir commeas
méthode. Ensuite, vous pouvez utiliser votre fonction dans le cadre des colClasses.Essayer:
Puis modifiez si nécessaire pour travailler pour vos données.
Éditer ---
Vous voudrez peut-être exécuter d'
setClass('myDate')
abord pour éviter l'avertissement (vous pouvez ignorer l'avertissement, mais cela peut devenir ennuyeux si vous le faites beaucoup et c'est un simple appel qui vous en débarrasse).la source
setMethod('myDate')
doit-on faire? L'exécuter me donne juste une erreur ...setClass
(corrigé maintenant). Ce qu'il fait est d'empêchersetAs
d'émettre un avertissement concernant «myDate» qui n'existe pas en tant que classe. L'avertissement est inoffensif et tout fonctionne toujours, mais la définition de la classe signifie que vous ne voyez même pas l'avertissement.S'il n'y a qu'un seul format de date que vous souhaitez modifier, vous pouvez utiliser le
Defaults
package pour modifier le format par défaut dansas.Date.character
Je pense que la réponse de @Greg Snow est bien meilleure, car elle ne change pas le comportement par défaut d'une fonction souvent utilisée.
la source
Au cas où vous auriez besoin de temps aussi:
la source
Il y a longtemps, le problème a été résolu par Hadley Wickham. Donc, de nos jours, la solution est réduite à un seul revêtement:
Peut-être que nous voulons même nous débarrasser des choses inutiles:
la source