Я пытаюсь написать скрипт, который может принимать файл, искать некоторые метаданные, относящиеся к файлу, и конвертировать определенные столбцы на основе этих метаданных.Например, предположим, что мои данные выглядят как вывод следующего:
test_data <- data.frame(date1 = c("03/02/2018","04/25/2018"),date2 = c("9/14/17","9/27/17"))
и предположим, что на основе поиска метаданных я обнаружил, что столбцы date1
и date2
входного файла имеют,соответственно, форматы
date_formats <- c("%m/%d/%Y","%m/%d/%y")
Таким образом, мой сценарий затем продолжит определять index
как логический вектор, который содержит значение TRUE
, где у меня есть столбец даты и FALSE
в противном случае, и затем попытаетсяЧтобы преобразовать все такие столбцы в стандартизированный формат даты R:
test_data[,index] <- as.data.frame(
lapply(test_data[,index],as.Date,
format = date_formats[index],
origin ="1970-01-01")))
Но это приводит к некоторому странному выводу:
date1 date2
1 2018-03-02 0017-09-14
2 2020-04-25 2017-09-27
Обратите внимание, что годы для (1,2) и (2,1) записи выключены.Я не понимаю, почему другие значения были правильно преобразованы.Это загадка №1.
Другая загадка заключается в том, что если я попытаюсь преобразовать только один столбец, скажем
as.data.frame(lapply(test_data[,1],as.Date,format = c("%m/%d/%Y")))
, то получу нежелательный вывод:
structure.17592..class....Date.. structure.17646..class....Date..
1 2018-03-02 2018-04-25
и если я сначала оберну это с cbind
а-ля
as.data.frame( cbind(lapply(test_data[,1],as.Date,format = c("%m/%d/%Y"))))
, то получу необработанные неформатированные значения даты из-за поведения cbind
:
V1
1 17592
2 17646
Итак, как я могу написать этот универсальный метод, который может обрабатывать произвольное количество столбцов в разных форматах и преобразовывать их все в один форматированный тип даты в кадре данных?