2013-02-25 1 views
3

Клиент отправил мне файл Excel с датами, отформатированными, например, 3/15/2012 за 15 марта. Я сохранил это как CSV-файл, а затем использовалas.Date с датами в формате m/d/y в R

camm$Date <- as.Date(camm$Date, "%m/%d/%y") 

но это дало мне значения, начиная с 2020 года!

Я попытался переформатировать даты в исходном файле csv, чтобы они были, например, 03/14/2013, но не смог этого сделать.

Любая помощь приветствуется

+5

Вы попробовали капитал '% Y'? – A5C1D2H2I1M1N2O1R2T1

ответ

7

Использование капитала Y в as.Date вызова вместо этого. Это должно сделать трюк:

> as.Date("3/15/2012", "%m/%d/%Y") 
[1] "2012-03-15" 

Из примеров в файле справки в вы можете реализовать, когда год полно указано, вы должны использовать %Y иначе %y, например:

> dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92") 
> as.Date(dates, "%m/%d/%y") 
[1] "1992-02-27" "1992-02-27" "1992-01-14" "1992-02-28" "1992-02-01" 

Вы можете увидеть, что в вашем примере Формат года - 2012 год, тогда вы должны использовать %Y, а в другом примере (взято из файла справки as.Date). Формат года - 92, затем с помощью %y - правильный путь. См. as.Date для получения дополнительной информации.

2

Вы также можете дать попробовать на lubridate пакет, если вы не хотите иметь дело с иероглифами :)

> library(lubridate) 
> parse_date_time('3/15/2012', 'mdy') 
1 parsed with %m/%d/%Y 
[1] "2012-03-15 UTC" 

PS .: Конечно, я не призываю всех использовать любые дополнительные зависимостей, этот ответ был просто размещен здесь как альтернативное (и быстро запоминающееся) решение

1

Для того, чтобы закончить фото, вы также можете попробовать новый пакет (2016-09) anytime, который использует преимущества Boost C + + библиотеки:

anytime::anytime("3/15/2012") 
#[1] "2012-03-15 CET"