У меня есть фрейм данных, который выглядит следующим образом (он содержит несколько строк строк с датами от 18xx до 2019 года)
date
1 25 February 1987
2 20 August 1974
3 9 October 1984
4 16-Oct-63
5 13-11-1961
6 03/23/87
7 01.01.1995
8 February 1988
9 1988
10 20050101-20051231
Мне нужно изменить столбец даты на один формат даты (например: ГГГГ-ММ-ДД или любой другой).
Поскольку для идентификатора 9 есть только некоторые значения года, я также должен их автоматически заполнить. Это всегда должно приводить к последнему дню конкретного года. Если для идентификатора 8 это месяц и год, то он всегда должен заполнять последний день конкретного месяца (и проверять, был ли это високосный год, как это было в 1988 году, и возвращать в этом случае что-то вроде 1988-02-29 ). Если это временной интервал, как в последнем ряду, он всегда должен обрезать первую часть и изменить его на 31 декабря данного года.
Как я могу это сделать?
Я думал об использовании пакета lubridate или пакета anytime. С lubridate и parse_date или parse_date_time. Это даже работает, но всегда заполняет пропущенные значения дней до первого дня месяца, а не до последнего.
library(lubridate)
date <- c("25 February 1987", "20 August 1974", "9 October 1984", "16-Oct-63", "13-11-1961", "03/23/87", "01.01.1995",
"February 1988", "1988", "20050101-20051231")
df <- as.data.frame(date)
parse_date(df$date)
parse_date_time(x = df$date,
orders = c("d m y", "d B Y", "d/m/Y","B Y", "Y", "m/d/y",
"Ymd-Ymd"),
locale = "eng")
Мои фактические результаты
(parse_date(df$date)):
[1] "1987-02-25 UTC" "1974-08-20 UTC" "1984-10-09 UTC" "2019-10-16 UTC" "2019-11-13 UTC" "1987-03-23 UTC" "1995-01-01 UTC"
[8] "1988-02-01 UTC" "1988-01-01 UTC" "2005-12-31 UTC"
В течение parse_date_time я остро получаю ошибку из-за последних ордеров "Ymd-Ymd" (Если я просто проверю: parse_date("20050101-20051231") it results in "2005-12-31 UTC"
, что я действительно хочу иметь!)