阅读带有日期和时间的csv

时间:2012-02-21 04:32:45

标签: r xts zoo

我在R工作并阅读csv,其第一栏中有日期和时间。 我想先在R中导入这个csv文件,然后将其转换为zoo obect。

我正在使用R

中的代码
EURUSD <- as.xts(read.zoo("myfile.csv",sep=",",tz="",header=T))

我的csv文件包含以下格式的数据:

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

当我运行上面的命令将数据导入R时,我得到了以下错误:

Error in as.POSIXlt.character(x, tz, ...) : 
  character string is not in a standard unambiguous format

我试图找到解决问题的所有方法。我通过网络阅读了很多博客,但这些方法都不适用于我。

我希望有人能帮助我。

3 个答案:

答案 0 :(得分:9)

虽然这似乎是一个老帖子,但我想分享我的经验,因为我经历了一个类似的非常令人沮丧的过程,试图将时间序列csv数据加载到R. 上面的问题是excel将日期和时间的格式更改为以下%m/%d/%Y %H:%M,基本上它会减少秒数。如果您阅读具有此格式的文件并且您有第二个分辨率数据,则会获得相似的多个日期时间组合。所以你不能简单地使用忽略秒的格式,因为它给出了以下错误消息。 “字符串不是标准的明确格式”

解决方案是返回excel并将日期时间列的格式更改为%m/%d/%Y %H:%M:%S。您可以通过选择最接近的日期时间默认格式为所需格式(在这种情况下为%m/%d/%Y %H:%M),然后在末尾手动添加:ss。将文件另存为csv文件然后读取它使用以下命令:

Data<-read.zoo("file.csv", tz="", header=TRUE,format='%m/%d/%Y %H:%M:%S')

这对我有用,我读了一个大约有900K行的文件。

答案 1 :(得分:5)

看起来错误是由于R无法识别您的日期列所在的格式(它无法解决 - 日期/月/年?月/日/年等等)。

你可以告诉R使用format的{​​{1}}参数是什么格式(有关你可以使用的说明符,请参阅read.zoo)。

例如,如果是日期/月/年(24小时制):分钟,您可以这样做:

?strptime

(注意 - 在您的问题中,您显示的csv数据片段不以逗号分隔。)

答案 2 :(得分:0)

当日期列像字符一样时,不使用as.xtc读取文件。然后使用此函数将日期转换为POSIXlt类:

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

然后在数据上使用函数as.xts。