Опираясь на ответ @ Ronak, вы можете использовать регулярное выражение для определения четырехзначного числового числа, а затем дополнить его четырьмя завершающими нулями.
x <- c(NA,NA,43465,43465,43465,43465,2018,NA,43465,43465, 43465, 43465)
ifelse(grepl('^\\d{4}$', x, perl = TRUE),
as.integer(paste0(x, '0000')),
as.integer(format(as.Date(x, origin='1899-12-30'), '%Y%m%d')))
[1] NA NA 20181231 20181231 20181231 20181231 20180000 NA 20181231 20181231 20181231 20181231
Вы получите несколько предупреждающих сообщений, касающихся NA
s, и если это вас беспокоит, вы можете добавить дополнительные ifelse
для управления NA. Здесь мы используем логический тест grep, чтобы увидеть, есть ли только четыре числа (год), затем мы создаем целое число значений. Это позволяет вам по-прежнему использовать математические операторы, такие как >
, <
, ==
и т. Д., И сохранять всю информацию.
Вы можете изменить '0000'
во время вызова paste0()
наболее подходящий номер на основе данных или варианта использования.