0

フォーマットで多くのクリーンアップが必要なデータセットがあります。ある時点で、調査対象の人々が釣りに費やした時間を計算したいと思います。釣りの開始時刻と停止時刻が通常の形式であれば簡単ですが、何らかの理由でデータが有用な10進数形式ではありません。たとえば、午前10時45分は10.45として記録され、11:10は11.10として記録されます。

私はすでにExcelにすべてのピリオドをコロンに置き換えるように依頼しようとしました(それはそれを行いません、そして他の人はすでに私がExcelを協力させるのを手伝おうとしました)。Rでこれを行うためのいくつかのアプローチを考えることができますが、どちらを進めるかはわかりません。まず、小数(ONLY)の後の部分を60で割る方法がある場合は、小数形式が理にかなっています。その場合、10.45は10.75になり、減算は問題ありません。または、ピリオドをコロンに置き換えるためのある種の単純なコードを記述してから、(私は考えていますか?)chronパッケージのようなものを使用してそれを操作することもできます。

これらのオプションのいずれかをどのようにコーディングするかわかりません-誰か提案がありますか?60で割るのは、ピリオドの前後でバラバラにする関数(ペーストの逆)で実現できると思いますが、そのような関数の名前がわかりません。最初の問題も私が想像するより単純なものですが、2番目の問題は、コマンドを一般化できるようにする方法を理解しようとしているRに関するより大きな問題に実際に光を当てるでしょう。10.45から10:45まですべてを強制的に変更する方法は理解していますが、実際の桁数に関係なく、「XX.XXを取得してXX:XXに変更」という形式があるかどうかを知りたいと思います。しかし、一度に1つのことを私は思います。

4

1 に答える 1

4

例がない場合、私はこれを提示as.difftimeします、:

> d <- as.difftime('10.45', format='%H.%M')
> d
Time difference of 10.75 hours
> as.numeric(d)
[1] 10.75

コメントについては、時間の値を文字列として読み取る必要があります。

Time.Start = c(9.10, 9.10, 9.10, 9.10, 9.10, 9.10)
Time.Stop = c(14.25, 14.25, 14.25, 14.25, 14.25, 14.25)

それらを文字列に変換します。そもそも文字列として読み取る方がはるかに良いでしょうが、sprintfを使用してそれらを恨むことができます。

Time.Stop <- sprintf('%.2f', Time.Stop)
Time.Start <- sprintf('%.2f', Time.Start)

次に、解析して差を取ります。 上記と同様に-、クラスのオブジェクトを返します。difftime

strptime(Time.Stop, format='%H.%M') - strptime(Time.Start, format='%H.%M')

## Time differences in hours
## [1] 5.25 5.25 5.25 5.25 5.25 5.25
## attr(,"tzone")
## [1] ""
于 2012-12-31T20:41:42.640 に答える