2014-11-14 2 views
2

Я использую R для анализа некоторых данных, и у меня есть этот набор данных, и я пытаюсь получить подмножество данных, которые используют только самые последние даты. У меня возникают проблемы с этим, и некоторые из моих дат имеют разные форматы.Непоследовательные форматы даты

ex. 10/01/00 10/01/00 10/20/2000 05/13/2000

Как я могу получить их, чтобы быть все в том же формате?

+1

Я, кажется, помню, что пакет «lubridate» имеет некоторые возможности для формата дата догадок. Если это всего лишь два разных формата, было бы просто сначала исправить «короткие», а затем преобразовать. –

+0

Добро пожаловать в переполнение стека! Чтобы помочь отладить проблему, это поможет увидеть ввод и то, что он выводит. – Jonathan

ответ

1

Вы можете попробовать из lubridate

x <- c("10/01/00", "10/01/00", "10/20/2000", "05/13/2000") 
library(lubridate) 
as.Date(x, guess_formats(x, "mdy")) 
# [1] "2000-10-01" "2000-10-01" "2000-10-20" "2000-05-13" 
+0

Удивительный, который отлично поработал! Благодаря! – Keeper01

0

Если они все 2000 или более поздней версии, попробуйте следующее:

x <- c("10/01/00", "10/01/00", "10/20/2000", "05/13/2000") # test data 

xx <- as.Date(sub("/(..)$", "/20\\1", x)); xx 
## [1] "10/01/2000" "10/01/2000" "10/20/2000" "05/13/2000" 

Если цель состоит в том, чтобы взять самую последнюю дату, то это будет работать на даты, все ли 2000 или более поздней версии при условии, что нет даты более 100 лет. Предположим, что мы уже выполнили указанную выше строку, если все даты в будущем, то самая последняя дата должна быть в 1900-х годах, поэтому повторите суб, но с 19 вместо 20 и возьмите max; в противном случае, дата должна быть не более 20xx так remvove даты в будущем и принять максимум того, что осталось:

if (all(xx > Sys.Date()) max(as.Date(sub("/(..)$", "/19\\1", x))) 
else max(xx[xx <= Sys.Date()]) 

Update Некоторые улучшения.