1) Используя входные данные, воспроизводимые в конце примечания, в toDate
используйте аргумент tryFormats
as.Date
. as.Date
предполагает, что все записи имеют одинаковый формат, поэтому lapply
поверх ввода, чтобы применить его индивидуально к каждому элементу, а затем объединить полученный список обратно в вектор Date
. Теперь используйте toDate
для преобразования DATE
в Date
класс, затем отформатируйте его и преобразуйте в верхний регистр. Пакеты не используются.
toDate <- function(x, formats = c("%d-%m-%y", "%d-%b-%y")) {
do.call("c", lapply(x, as.Date, tryFormats = formats))
}
transform(df, DATE = toupper(format(toDate(DATE), "%d-%b-%Y")))
2) Другой подход заключается в простом преобразовании тех записей, которые еще не в желаемом формате. Опять же, пакеты не используются.
ok <- grepl("[A-Z]", df$DATE)
transform(df, DATE =
replace(DATE, !ok, toupper(format(as.Date(DATE[!ok], "%d-%m-%y"), "%d-%b-%y")))
Примечание
Lines <- "CODE NAME DATE HOUR
1 Ab 01-01-19 1
1 Ab 02-01-19 2
1 Ab 03-01-19 3
1 Ab 04-01-19 4
2 Xy 01-JAN-19 1
2 Xy 02-JAN-19 2
2 Xy 03-JAN-19 3
2 Xy 04-JAN-19 4"
df <- read.table(text = Lines, header = TRUE, as.is = TRUE)