2016-07-26 6 views
0

У меня есть колонка: x, которая имеет два разных формата даты 12/31/1998 и 12/--/98. Как вы можете видеть, во втором формате отсутствует date, а year - в 2-х разрядах.Извлечение года из двух разных форматов даты

Мне нужно извлечь year со всех дат в моей колонке. Итак, когда я использую Year<- data.frame(format(df$x, "%Y")), он возвращает year для первого формата. Для второго формата возвращается NA.

Буду признателен за всю помощь. Благодарю.

+1

Вам нужно четырехзначное число в течение года или вы можете жить с двумя цифрами? –

+0

Мой 'класс' является' фактором' в 'data frame'. Но позже я конвертирую их в формат 'date', используя' '% m /% d /% Y" '. Использование 'basename', предложенное в следующем ответе, решило бы мою проблему. – Santosh

+0

Имеются ли данные всегда '--' в день, когда год находится в двухзначном формате? – dayne

ответ

3

Вы могли бы получить немного творческими и указать уродливый формат для отсутствующих данных, а затем просто сохранить один из действительных ответов:

vals <- c("12/31/1998", "12/--/98") 
out <- pmax(
     as.Date(vals, "%m/%d/%Y"), 
     as.Date(paste0("01",vals), "%d%m/--/%y"), 
     na.rm=TRUE 
     ) 
format(out, "%Y") 
#[1] "1998" "1998" 
+1

На самом деле, я так думал. Я собирался указать дату отсутствия данных. Это отличный ответ, который я точно искал. Огромное спасибо. – Santosh

+0

Как насчет даты, которая является '12/01/98'? Я не понимаю, всегда ли строка имеет '-', когда год находится в двузначном формате. – dayne

+0

@dayne - ОП указали, что у них два формата - это охватывает оба из них, насколько я могу судить. – thelatemail

2

Если все они указаны в формате, где год является последним числом после «/», вы можете использовать basename. Тогда вам просто нужно тайный на 2 символьные года в формат четыре года:

vals <- c("12/31/1998", "12/--/98", "68", "69") 
yrs <- basename(vals) 
yrs <- ifelse(nchar(yrs) == 2, format(as.Date(yrs, format = "%y"), "%Y"), yrs) 
yrs 
# [1] "1998" "1998" "2068" "1969" 

Вопрос в том, что не работает с датами старше 1969.

Смежные вопросы