web-dev-qa-db-ja.com

日付と時刻でcsvを読み取る

私はRで作業していて、最初の列に日付と時刻があるcsvを読んでいます。最初にこのcsvファイルをRにインポートしてから、それを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

私は問題を整理するためのすべての方法を見つけようとしました。私はネット上で非常に多くのブログを読みましたが、どの方法も私にとってはうまくいきません。

誰かが私を助けてくれることを願っています。

16
user395882

これは古い投稿のようですが、時系列のcsvデータをRにロードしようとする同様の非常に苛立たしいプロセスを経験したので、私の経験を共有したいと思います。上記の問題は、Excelが日付と時刻の形式を次の%m/%d/%Y %H:%Mは、基本的に秒をドロップします。この形式のファイルを読み取り、2番目の解像度データがある場合、類似した複数の日時の組み合わせを取得します。したがって、次のエラーメッセージが表示されるため、秒を無視する形式を使用することはできません。 「文字列は明確な標準形式ではありません」

解決策は、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行のファイルを読みました。

9
Ghaleb Abdulla

エラーの原因は、Rが日付列の形式を認識しないためです(日付/月/年?月/日/年?など)。

read.Zooformat引数を使用して、Rの形式をRに伝えることができます(使用できる指定子については、?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データのスニペットはカンマ区切りではありません)。

5

日付列が文字のような場合は、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を使用します。

0
dmitriy