112 votes

Spécifier le format de Date pour l’argument colClasses dans read.table/read.csv

Question:

Est-il un moyen de spécifier le format de la Date lors de l'utilisation de la colClasses argument à lire.table/lire.csv?

(Je me rends compte que je peux convertir après l'importation, mais avec de nombreuses colonnes de date comme ça, il serait plus facile de le faire dans l'étape d'importation)


Exemple:

J'ai un .csv avec des colonnes de date dans le format %d/%m/%Y.

dataImport <- read.csv("data.csv", colClasses = c("factor","factor","Date"))

Il obtient la conversion de mal. Par exemple, 15/07/2008 devient 0015-07-20.


Reproductible code:

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:

code output

171voto

Greg Snow Points 22040

Vous pouvez écrire votre propre fonction qui accepte une chaîne de caractères, et la convertit une Date en utilisant le format que vous souhaitez, puis utilisez l' setAs à le définir comme un as méthode. Ensuite, vous pouvez utiliser votre fonction dans le cadre de la colClasses.

Essayez:

setAs("character","myDate", function(from) as.Date(from, format="%d/%m/%Y") )

tmp <- c("1, 15/08/2008", "2, 23/05/2010")
con <- textConnection(tmp)

tmp2 <- read.csv(con, colClasses=c('numeric','myDate'), header=FALSE)
str(tmp2)

Puis modifiez-le si nécessaire pour le travail de vos données.

Edit ---

Vous pouvez exécuter setClass('myDate') d'abord pour éviter l'avertissement (vous pouvez ignorer l'avertissement, mais il peut devenir ennuyeux si vous faites cela, beaucoup et c'est un appel simple que de se débarrasser d'elle).

25voto

mnel Points 48160

S’il y a seulement 1 format de la date à modifier, vous pouvez utiliser le pour modifier le format par défaut dans le paquet

Je pense que la réponse de @Greg Snow est beaucoup mieux, car il ne modifie pas le comportement par défaut d’une fonction souvent utilisée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X