2016-10-24 5 views
3

私は3つの時間(POSIXct)オブジェクトt1,t2,t3を持っています。これはタスクを完了するための時間を指定します。2つのdifftimeオブジェクトを分割します

私は、次の手順を実行してt1t2t3が見つかりました:

t1 <- as.POSIXct("2016-10-30 13:53:34") - as.POSIXct("2016-10-30 13:35:34") 
t2 <- as.POSIXct("2016-10-30 14:53:34") - as.POSIXct("2016-10-30 14:35:34") 
t3 <- as.POSIXct("2016-10-30 15:50:34") - as.POSIXct("2016-10-30 15:40:34") 

私は比t1/t3t2/t3を見つけたいです。しかし、私は次のエラーを取得する:

t1/t3 
# Error in `/.difftime`(t1, t3) : 
# second argument of/cannot be a "difftime" object 

私は2つのdifftimeオブジェクトを分割することができないことを理解しました。 2つのオブジェクトを2つに分割した結果を見つける方法はありますか?

+1

したいですか?時間数?日数?また、実際に 't1'、' t2'、 't3'を複製するコードを与えてください。 –

+0

私は秒数で分けたいと思います。 – Katherine

+2

'difftime'オブジェクト' d'を 'as.numeric(d、units = 'secs')で秒に変換することができます。 –

答えて

6

difftimeで分割するには、数値に変換する必要があります。変換では、単位を指定する必要があります。たとえば:@JonathanLisicノートとして

t1/as.double(t3, units='secs') 

as.doubleは、一般的にunitsパラメータをとらない、これは一般的な時間のクラスでは動作しません。パラメータを取るのはdifftimeS3メソッドです。

+0

ありがとうございます!出来た。 – Katherine

+1

この変換は他のDateTimeClassesと必ずしも関連しないことに注意してください。例えば'a1 < - strptime(" 2016-10-30 13:53:34 "、format ="%Y-%m-%d%H:%M:%S "); as.double(a1、units = "days") 'はまだエポックから秒を返します。 –

+1

@JonathanLisic本当に、ありがとうございました。それがここで働く理由は、それが 'as。doubleは 'difftime'の' S3'メソッドです。 –

0

MatthewLundbergの答えは、より正確であるが、私はちょうど常に数字だけですRの時間ベースのオブジェクトの下にある構造を説明するのを助けるために代替案を提案します:@

unclass(t1)/unclass(t3) 
# [1] 1.8 
# attr(,"units") 
# [1] "mins" 

。なお、という点で出力の単位は分/秒であるので、t1/as.double(t3, units = 'secs')のアプローチはあまり意味がありませんが、この答えは単位がありません。さらに、このアプローチは、デフォルトであるため、少し危険であることを

注意、-.POSIXt(最終的に呼び出されますがt1t2、およびt3定義する場合)は自動的にはここで、コアで(意志-.POSIXtを出力する単位を選択しますdifftimeをデフォルトのunits = "auto"としてください)。この場合、我々は(多分)すべて3が与えられていることを幸運単位ですが、t4を考慮してください。

t4 = as.POSIXct('2017-10-21 12:00:35') - as.POSIXct('2017-10-21 12:00:00') 
t4 
# Time difference of 35 secs 

我々は比率でt4を使用する場合は、再度、我々はおそらく間違った単位を取得します。

我々は、明示的にdifftimeを呼び出し、先行ユニットを宣言することでこの問題を回避することができます:あなたは間隔の秒数で分割する

t1 = difftime("2016-10-30 13:53:34", "2016-10-30 13:35:34", units = 'mins') 
t2 = difftime("2016-10-30 14:53:34", "2016-10-30 14:35:34", units = 'mins') 
t3 = difftime("2016-10-30 15:50:34", "2016-10-30 15:40:34", units = 'mins') 
t4 = difftime('2017-10-21 12:00:35', '2017-10-21 12:00:00', units = 'mins') 
t4 
# Time difference of 0.5833333 mins 
関連する問題