2016-05-10 18 views

Antwort

7

Versuchen:

v <- c("October 1, 2014", "June 14, 2014") 
as.Date(v, "%B %d,%Y") 

Welche gibt:

#[1] "2014-10-01" "2014-06-14" 

Oder

strptime(v, "%B %d,%Y") 

Welche gibt:

#[1] "2014-10-01 EDT" "2014-06-14 EDT" 

Benchmark

largev <- rep(v, 10e5) 

library(microbenchmark) 
microbenchmark(
    as.Date = as.Date(largev, "%B %d,%Y"), 
    strptime = strptime(largev, "%B %d,%Y"), 
    times = 10 
) 

Welche gibt:

#Unit: seconds 
#  expr  min  lq  mean median  uq  max neval cld 
# as.Date 1.479891 1.480671 1.527838 1.483158 1.489222 1.863777 10 a 
# strptime 2.177625 2.183247 2.237732 2.255282 2.268452 2.272537 10 b 

Per erwähnt durch @cory in den Kommentaren, verwenden ?strptime die Formatcodes zu erhalten:

  • % B Vollständiger Monatsname im aktuellen Gebietsschema. (Entspricht auch dem abgekürzten Namen bei der Eingabe.)
  • % d Tag des Monats als Dezimalzahl (01-31).
  • % Y Jahr mit Jahrhundert. Beachten Sie, dass während es keine Null in dem ursprünglichen gregorianischen Kalender war, ISO 8601: 2004 definiert sie gültig zu sein (interpretiert als 1BC)
+2

Auch 'strptime (v,"% B% d,% Y ")' –

+0

Danke Jungs :) Irgendwelche Unterschiede in der Leistung zwischen 'as.Date' und' strptime'? –