I am working in R and reading csv which has date and time in its first column.
I want to import this csv file in R first and then convert it to zoo obect.
I am using the code in R
EURUSD <- as.xts(read.zoo("myfile.csv",sep=",",tz="",header=T))
My csv file contain data in the format:
Date,Open,Low,High,Close
2006-01-02 10:01:00,2822.9,2825.45,2822.1,2824.9
2006-01-02 10:02:00,2825,2825.9,2824,2824.95
2006-01-02 10:03:00,2824.55,2826.45,2824,2826.45
2006-01-02 10:04:00,2826.45,2826.45,2824.9,2825.5
2006-01-02 10:05:00,2825.15,2825.5,2824,2824.85
2006-01-02 10:06:00,2824.7,2825.5,2823.7,2823.8
2006-01-02 10:07:00,2823.95,2824.45,2823.55,2824
2006-01-02 10:08:00,2824,2824.85,2823.5,2824.85
2006-01-02 10:09:00,2824.25,2825.45,2824,2825.45
2006-01-02 10:10:00,2825.2,2827,2825,2827
When I run the above command to import the data in to R I get the folowwwing error :
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
I tried to find all the ways to sort out the issue. I read so many blogs over net but none of the method works for me.
I hope someone would help me.
Although this seems to be an old post, but I want to share my experience since I went through a similar very frustrating process trying to load time series csv data into R.
The problem above is that excel changes the format of the date and time to the following %m/%d/%Y %H:%M
, basically it drops the seconds. If you read a file with this format and you have a second resolution data you get multiple date time combinations that are similar. so you cannot simply use the format that ignores seconds because it gives the following error message . "character string is not in a standard unambiguous format"
The solution is to go back to excel and change the format of the date time column to be %m/%d/%Y %H:%M:%S
. You can do that by choosing the closest date time default formats to the desired format (in this case it is %m/%d/%Y %H:%M
and then manually add :ss
at the end. Save the file as a csv file and then read it using the following command:
Data<-read.zoo("file.csv", tz="", header=TRUE,format='%m/%d/%Y %H:%M:%S')
This worked for me and I read a file that has about 900K rows.
It looks like the error is due to R not recognising what format your date column is in (it can't work out -- date/month/year? month/date/year? etc).
You can tell R what format it is in using the format
argument to read.zoo
(see ?strptime
for the specifiers you can use).
For example, if it was date/month/year hour(24-hour clock):minutes, you could do:
EURUSD <- as.xts(read.zoo(file_name,
sep=',',
tz='',
header=T,
format='%d/%m/%Y %H:%M:%S')) # see the 'format' argument?
(Note - in your question the snippet of csv data you showed isn't comma-delimited).
Read the file without using as.xtc, when the date column is like a character. And then convert the dates to POSIXlt class with this function:
library("chron")
DateConvert<-function(x){
dt<-strsplit(x,split = "T")
dt<-unlist(dt)
d1<-dt[1:length(dt) %% 2==1 ]
d2<-dt[1:length(dt) %% 2==0 ]
a<-as.POSIXlt(chron(dates.=d1, times.=d2, format = c(dates = "y-m-d", times = "h:m:s")))
return(a)
}
DateConvert('Your column')
and just then use the function as.xts on you data.