用日期和时间读取csv
我在R中工作,阅读csv,在第一列中有日期和时间。 我想先在R中导入这个csv文件,然后将它转换为zoo obect。用日期和时间读取csv
我使用的代码中的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
当我运行上面的命令中的数据导入RI获得folowwwing错误:
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
我试图找出解决问题的所有方法。我通过网络阅读了很多博客,但没有一种方法适用于我。
我希望有人能帮助我。
它看起来像错误是由于R不承认你的日期列是什么格式(它不能工作 - 日期/月/年?月/日/年?等)。
您可以告诉R使用format
参数read.zoo
(请参阅?strptime
以了解您可以使用的说明符)的格式。
例如,如果有人日期/月/年小时(24小时制):分钟,你可以这样做:
EURUSD <- as.xts(read.zoo(file_name,
sep=',',
tz='',
header=T,
format='%d/%m/%Y %H:%M:%S')) # see the 'format' argument?
(注 - 在你的问题CSV数据的片段你显示ISN用逗号分隔)。
我试过使用read.zoo(“C:/Users/ParamJeet/Desktop/test/eurusd.csv”,sep =“,”,tz =“”,format =“ %Y-%m-%d%H:%M“,header = T),但它给了我错误:在read.zoo中的错误(”C:/Users/ParamJeet/Desktop/test/eurusd.csv“,sep = “,”,:,: 索引在数据行有13428个错误的条目:323559 323560 323561 323562 323563 – user395882 2012-02-21 04:58:22
然后看看那些r在你的csv中 - 我的猜测是他们有不同的格式。 – 2012-02-21 05:07:14
如果我打开我的记事本它看起来像日期,开放,低,高,关闭 2006-01-02 10:01:00 00822.9,2825.45,2822.1,2824.9如果我打开excel数据看起来像日期\t打开\t低\t高\t关闭 2006年1月2日10:01 \t 2822.9 \t 2825.45 \t 2822.1 \t 2824.9 2006年1月2日10:02 2825.9 2824.95 这认为这种差异导致的问题。 – user395882 2012-02-21 05:31:05
虽然这似乎是一个旧帖子,但我想分享我的经验,因为我经历了一个类似的非常令人沮丧的过程,试图加载时间序列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行的文件。
阅读,而无需使用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函数。
听起来就像你的日期栏里有东西在捣乱它。可能是一个流浪的空白,“ - ”,“,”,“n.a.”或类似的东西。 – 2012-02-21 04:37:43
你确定你的'sep'是逗号吗?您的示例csv文件格式看起来像它的选项卡呢? – 2012-02-21 04:37:57
它是逗号分隔的。我在记事本中打开了我的csv文件,它清楚地显示了逗号分隔 – user395882 2012-02-21 04:44:36