Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

as.Date returning NA while converting from 'ddmmmyyyy'

Tags:

I am trying to convert the string "2013-JAN-14" into a Date as follow :

sdate1 <- "2013-JAN-14" ddate1 <- as.Date(sdate1,format="%Y-%b-%d") ddate1 

but I get :

[1] NA 

What am I doing wrong ? should I install a package for this purpose (I tried installing chron) .

like image 483
Ricky Bobby Avatar asked Mar 22 '13 09:03

Ricky Bobby


People also ask

How do I convert a character to a date in R?

You can use the as. Date( ) function to convert character data to dates. The format is as. Date(x, "format"), where x is the character data and format gives the appropriate format.

How do I convert a string to a date in R?

Date() function in R Language is used to convert a string into date format.


2 Answers

Works for me. The reasons it doesn't for you probably has to do with your system locale.

?as.Date has the following to say:

## 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) 

Worth a try.

like image 110
NPE Avatar answered Oct 11 '22 19:10

NPE


This can also happen if you try to convert your date of class factor into a date of class Date. You need to first convert into POSIXt otherwise as.Date doesn't know what part of your string corresponds to what.

Wrong way: direct conversion from factor to date:

a<-as.factor("24/06/2018") b<-as.Date(a,format="%Y-%m-%d") 

You will get as an output:

a [1] 24/06/2018 Levels: 24/06/2018 class(a) [1] "factor" b [1] NA 

Right way, converting factor into POSIXt and then into date

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 

You will get as an output:

abis [1] "2018-06-24 AEST" class(abis) [1] "POSIXlt" "POSIXt" b [1] "2018-06-24" class(b) [1] "Date" 
like image 38
Nakx Avatar answered Oct 11 '22 20:10

Nakx