As.Date возвращает NA при преобразовании из 'ddmmmyyyy'
Я пытаюсь преобразовать строку "2013-JAN-14" в Date следующим образом:
sdate1 <- "2013-JAN-14"
ddate1 <- as.Date(sdate1,format="%Y-%b-%d")
ddate1
но я получаю:
[1] NA
Что я делаю неправильно? должен ли я установить пакет для этой цели (я попытался установить chron).
Ответы
Ответ 1
Работает для меня. Причины, по которым это не для вас, вероятно, связаны с вашей системой.
?as.Date
имеет следующие значения:
## This will give NA(s) in some locales; setting the C locale
## as in the commented lines will overcome this on most systems.
## lct <- Sys.getlocale("LC_TIME"); Sys.setlocale("LC_TIME", "C")
x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
z <- as.Date(x, "%d%b%Y")
## Sys.setlocale("LC_TIME", lct)
Стоит попробовать.
Ответ 2
Мое решение ниже может не работать для каждой проблемы, которая приводит к тому, что as.Date() возвращает NA, но это работает для некоторых, а именно, когда переменная Date считывается в факторном формате.
Просто прочитайте в .csv со строкамиAsFactors = FALSE
data <- read.csv("data.csv", stringsAsFactors = FALSE)
data$date <- as.Date(data$date)
После попытки (и неудачи) решения проблемы NA с моей системной локалей это решение сработало для меня.
Ответ 3
Это также может произойти, если вы попытаетесь преобразовать дату factor
класса в дату класса Date
. Вам нужно сначала преобразовать в POSIXt
иначе as.Date
не знает, какая часть вашей строки соответствует тому, что.
Неправильный путь: прямое преобразование с коэффициента на сегодняшний день:
a<-as.factor("24/06/2018")
b<-as.Date(a,format="%Y-%m-%d")
Вы получите результат:
a
[1] 24/06/2018
Levels: 24/06/2018
class(a)
[1] "factor"
b
[1] NA
Правильный путь, преобразование фактора в POSIXt, а затем в дату
a<-as.factor("24/06/2018")
abis<-strptime(a,format="%d/%m/%Y") #defining what is the original format of your date
b<-as.Date(abis,format="%Y-%m-%d") #defining what is the desired format of your date
Вы получите результат:
abis
[1] "2018-06-24 AEST"
class(abis)
[1] "POSIXlt" "POSIXt"
b
[1] "2018-06-24"
class(b)
[1] "Date"