1

一部のデータを組み合わせて match() 関数を使用し、非常に大きなデータ フレームから特定の取引日時を取得していますが、コードが機能しない理由に完全に困惑しています。Date 列と Time 列が分離されていることに注意してください。これにより、as.POSIXct 関数の使用も難しくなっています。ご覧ください:

これは、データが私に来る方法です:

  Symbol      Date Time     Open     High      Low    Close Volume Tick.Count
1  USH94 01/3/1994 7:21 114.4062 114.4375 114.3750 114.4062      0          5
2  USH94 01/3/1994 7:22 114.3750 114.4062 114.3125 114.3750      0         11
3  USH94 01/3/1994 7:23 114.3438 114.3750 114.3125 114.3438      0          7
4  USH94 01/3/1994 7:24 114.3125 114.3125 114.2500 114.2812      0         14
5  USH94 01/3/1994 7:25 114.2500 114.2812 114.2188 114.2188      0          6
6  USH94 01/3/1994 7:26 114.1875 114.2500 114.1875 114.2500      0         13

次に、date() 関数と time() 関数を使用して、列を要素から日付と時刻の値に変換します。この場合、変数 a として文字列として保存された秒も追加し、時間の変更により時間を追加します。

US$Time <- times(paste(US$Time,a,sep = ':'))+1/24
US$Date <- dates(as.character(US$Date))

現在の米国の様子は次のとおりです。

head(US)

  Symbol     Date     Time     Open     High      Low    Close Volume Tick.Count
1  USH94 01/03/94 08:21:00 114.4062 114.4375 114.3750 114.4062      0          5
2  USH94 01/03/94 08:22:00 114.3750 114.4062 114.3125 114.3750      0         11
3  USH94 01/03/94 08:23:00 114.3438 114.3750 114.3125 114.3438      0          7
4  USH94 01/03/94 08:24:00 114.3125 114.3125 114.2500 114.2812      0         14
5  USH94 01/03/94 08:25:00 114.2500 114.2812 114.2188 114.2188      0          6
6  USH94 01/03/94 08:26:00 114.1875 114.2500 114.1875 114.2500      0         13

同じ。

次に、日付と時刻を paste() 関数と組み合わせようとします

US$TradeDates <- paste(US$Date,US$Time)

head(US)

  Symbol     Date     Time     Open     High      Low    Close Volume Tick.Count        TradeDates
1  USH94 01/03/94 08:21:00 114.4062 114.4375 114.3750 114.4062      0          5 01/03/94 0.34791667
2  USH94 01/03/94 08:22:00 114.3750 114.4062 114.3125 114.3750      0         11 01/03/94 0.34861111
3  USH94 01/03/94 08:23:00 114.3438 114.3750 114.3125 114.3438      0          7 01/03/94 0.34930556
4  USH94 01/03/94 08:24:00 114.3125 114.3125 114.2500 114.2812      0         14 01/03/94 0.35000000
5  USH94 01/03/94 08:25:00 114.2500 114.2812 114.2188 114.2188      0          6 01/03/94 0.35069444
6  USH94 01/03/94 08:26:00 114.1875 114.2500 114.1875 114.2500      0         13 01/03/94 0.35138889

TradeDates 列に突然 10 進数形式の時間が含まれていることを確認してください....しかし、本当に困惑しているのは、要素ごとにまったく同じ関数を実行すると、目的の結果が得られることです。

US$TradeDates[1] <- paste(US$Date[1],US$Time[1])

head(US)

  Symbol     Date     Time     Open     High      Low    Close Volume Tick.Count          TradeDates
1  USH94 01/03/94 08:21:00 114.4062 114.4375 114.3750 114.4062      0          5   01/03/94 08:21:00
2  USH94 01/03/94 08:22:00 114.3750 114.4062 114.3125 114.3750      0         11 01/03/94 0.34861111
3  USH94 01/03/94 08:23:00 114.3438 114.3750 114.3125 114.3438      0          7 01/03/94 0.34930556
4  USH94 01/03/94 08:24:00 114.3125 114.3125 114.2500 114.2812      0         14 01/03/94 0.35000000
5  USH94 01/03/94 08:25:00 114.2500 114.2812 114.2188 114.2188      0          6 01/03/94 0.35069444
6  USH94 01/03/94 08:26:00 114.1875 114.2500 114.1875 114.2500      0         13 01/03/94 0.35138889

最後の列の最初の行はまさに私が求めているものですが、他のすべての行はまだ 10 進数形式になっていることに注意してください。これが管理可能なデータセットである場合、ループを使用するだけですが、これは文字通り数十億行であり、R はそのループを処理できません。

何かご意見は?

4

1 に答える 1

1

POSIX形式で作業する必要があります。そうすれば、作業が楽になります。

Date列を次のように変換できPOSIXltます

as.POSIXlt(as.character(US$Date), format="%d/%m/%Y")

Time次に、数秒で列を追加するだけで、POSIXltフォーマットが残りを処理します。

于 2012-11-20T21:46:46.923 に答える