9

R で時差 (デルタ時間) を計算したいと思います。タイムスタンプは、日時 (年-月-日 時:分: 秒.ミリ秒) の 2 列のデータ フレームに格納されます。行:

c_id    c_time
6875    2012-08-15 00:00:40.169
6874    2012-08-15 00:01:40.055
6876    2012-08-15 00:02:40.542

違いのある列を出力したいと思います。

c_diff
0
00:01:0.886
00:01:0.487

誰かがこれを行う方法を教えてもらえますか? 結果を維持するための他の/より良い提案があれば、それは大歓迎です。ミシュ

4

2 に答える 2

7

data.frameこれを試してください (呼び出された にデータがあると仮定していますmydf)、最初のタイムスタンプと後続のすべてのタイムスタンプの差が必要であるとします。

c_time <- as.POSIXlt( mydf$c_time )
difftime( c_time[1] , c_time[2:length(c_time)] )
  #Time differences in secs
  #[1]  -59.886 -120.373
  #attr(,"tzone")
  #[1] ""

編集

ただし、後続のタイムスタンプ間のデルタ差が必要な場合は、観測を逆にする必要があります (最初の方法では time1 - time2 が負になるため)、代わりに次のように使用できます。

c_time <- rev( c_time )
difftime(c_time[1:(length(c_time)-1)] , c_time[2:length(c_time)])
  #Time differences in secs
  #[1] 60.487 59.886
  #attr(,"tzone")
  #[1] ""
于 2013-03-19T17:24:24.613 に答える
1

私はあなたに完全な答えを与えることはできませんが、これはあなたがほとんどそこに到達するのに役立ちます:

x="2012-07-11 04:22:40.169"
datex=strptime(x,format='%Y-%m-%d %H:%M:%S') #this converts your date string 
#into a date value recognized in r

y="2012-08-15 08:32:40.169"
datey=strptime(y,format='%Y-%m-%d %H:%M:%S')

time_diff=as.numeric(difftime(datey,datex)) #in decimal days
>35.17361

10 進数の日から、必要な時間形式に戻すことができますが、何をしたいかによっては、数値形式のままにしておくこともできます (おそらく、time_diff に 24 を掛けて、10 進数の時間で)。 ..

于 2013-03-19T17:35:25.917 に答える