2012-02-21 85 views
15

我在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 

我試圖找出解決問題的所有方法。我通過網絡閱讀了很多博客,但沒有一種方法適用於我。

我希望有人能幫助我。

+1

聽起來就像你的日期欄裏有東西在搗亂它。可能是一個流浪的空白,「 - 」,「,」,「n.a.」或類似的東西。 – 2012-02-21 04:37:43

+0

你確定你的'sep'是逗號嗎?您的示例csv文件格式看起來像它的選項卡呢? – 2012-02-21 04:37:57

+0

它是逗號分隔的。我在記事本中打開了我的csv文件,它清楚地顯示了逗號分隔 – user395882 2012-02-21 04:44:36

回答

5

它看起來像錯誤是由於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用逗號分隔)。

+0

我試過使用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

+0

然後看看那些r在你的csv中 - 我的猜測是他們有不同的格式。 – 2012-02-21 05:07:14

+0

如果我打開我的記事本它看起來像日期,開放,低,高,關閉 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

8

雖然這似乎是一箇舊帖子,但我想分享我的經驗,因爲我經歷了一個類似的非常令人沮喪的過程,試圖加載時間序列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行的文件。

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函數。