J'ai une colonne avec des dates sous forme de caractère au format 10/17/2017 12:00:00 AM
. Je veux ne garder que la partie date, c'est-à-dire 2017-10-17
. J'utilise -
df$ReportDate = as.Date(df$ReportDate, format = "%m/%d/%Y %I:%M:%S %p")
df$ReportDate = as.Date(format(df$ReportDate, "%Y-%m-%d"))
cela fonctionne, mais le cadre de données compte plus de 5 millions de lignes, ce qui prend près de deux minutes.
user system elapsed
104.73 0.55 105.46
Existe-t-il un moyen plus rapide et plus efficace de procéder?
Notez que as.Date
ignorera les fichiers indésirables après la date, donc cela prend moins de 10 secondes sur mon ordinateur portable pas particulièrement rapide:
xx <- rep("10/17/2017 12:00:00 AM", 5000000) # test input
system.time(as.Date(xx, "%m/%d/%Y"))
## user system elapsed
## 9.57 0.20 9.82
Il serait peut-être plus efficace de convertir de Date
à character
:
# Create dummy data
date_from <- as.Date('01/01/1999 12:00:00 AM',
format = "%m/%d/%Y %I:%M:%S %p")
date_to <- as.Date('01/01/2017 12:00:00 AM',
format = "%m/%d/%Y %I:%M:%S %p")
df <- data.frame(ReportDate = sample(seq(from = date_from,
to = date_to, by = "day"), 5000000, T))
# Convert to char
start <- Sys.time()
df$ReportDate <- as.character(df$ReportDate)
Sys.time() - start
Time difference of 12.37254 secs
head(df)
ReportDate
1 2011-08-04
2 2013-11-15
3 2002-09-08
4 2011-07-01
5 2011-01-22
6 2001-01-04