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"