12

次の形式の日付文字列の約 200 万行を含む csv があります。

2012/11/13 21:10:00 

それを呼びましょうcsv$Date.and.Time

これらの日付 (およびそれに付随するデータ) をできるだけ早く xts に変換したい

変換を正常に実行するスクリプトを作成しましたが (以下を参照)、非常に遅いので、できるだけ高速化したいと考えています。

これが私の現在の方法論です。これをより速くする方法について何か提案はありますか?

 dt <- as.POSIXct(csv$Date.and.Time,tz="UTC")

idx <- format(dt,tz=z,usetz=TRUE)

したがって、スクリプトはこれらの日付文字列を に変換しPOSIX.ctます。format次に、 (zは変換先の TZ を表す変数です)を使用してタイムゾーン変換を行います。xts次に、csv 内の残りのデータを使用して、これを xts シリーズにする定期的な呼び出しを行います。

これは 100% 機能します。とても、とても遅いです。これを並行して実行しようとしました(何もしません。どちらかといえば悪化します)。「遅い」とはどういう意味ですか?

 user    system   elapsed 
155.246  16.430 171.650 

それは 3GhZ、16GB RAM 2012 mb pro です。Win7マシンで32GB RAMを搭載した同様のプロセッサで約半分を取得できます

誰かがより良いアイデアを持っていると確信しています-私はRcppなどを介して提案を受け付けています。そうは言っても、最速の変換が得られる方法であれば、私はこれを行うつもりです。

私はどんな助けにも非常に感謝しています。前もって感謝します。

4

2 に答える 2

21

時間解析関数を呼び出さずに、C レベルの文字列関数を使用するだけで、可能な限り最速の方法でこれを行う Simon の小さくてシンプルなfasttimeパッケージが必要です。

ほど多くの形式をサポートしていませんstrptime。実際、フォーマット文字列すらありません。ただし、整形式の ISO 形式のバリアント、つまりyyyy-mm-dd hh:mm:ss.fff機能し、/セパレーターも機能する場合があります。

于 2012-11-30T04:09:38.850 に答える
3

使用してみてくださいlubridate- 正規表現を使用してすべての日時解析を行うため、はるかに高速であるだけでなく、はるかに柔軟でもあります。

于 2012-11-30T15:17:55.273 に答える