Разбор дат в R из строк с несколькими форматами - PullRequest
0 голосов
/ 20 января 2019

У меня есть тиббл с R около 2000 строк. Он был импортирован из Excel с использованием read_excel. Одним из полей является поле даты: dob. Он импортируется в виде строки и имеет даты в трех форматах:

"YYYY-MM-DD"
"DD-MM-YYYY"
"XXXXX"  (ie, a five-digit Excel-style date)

Допустим, я рассматриваю столбец как вектор.

dob <- c("1969-02-02", "1986-05-02", "34486", "1995-09-05", "1983-06-05",
         "1981-02-01", "30621", "01-05-1986")

Я вижу, что мне, вероятно, нужно решение, которое использует parse_date_time и as.Date.

Если я использую parse_date_time:

dob_fixed <- parse_date_time(dob, c("ymd", "dmy"))

Это исправляет их все, кроме пятизначного, которое возвращает NA.

Я могу исправить пятизначную, используя as.integer и as.Date:

dob_fixed2 <- as.Date(as.integer(dob), origin = "1899-12-30")

В идеале я бы запустил один, а затем другой, но поскольку каждый возвращает NA для строк, которые не работают, я не могу этого сделать.

Какие-либо предложения для всего? Я мог бы просто изменить их в Excel и повторно импортировать, но я чувствую, что это обман!

1 Ответ

0 голосов
/ 20 января 2019

Мы создаем логический индекс после первого запуска на основе значений NA и используем его для индексации второго запуска

i1 <- is.na(dob_fixed)
dob_fixed[i1] <- as.Date(as.integer(dob[i1]), origin = "1899-12-30")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...