ルブリデートの使用方法は次のとおりです。
library(lubridate);
x <- abs(period_to_seconds(hm(Time1)-hm(Time2)))/60;
ifelse(x>720,1440-x,x);
## [1] 60 1 1 60
この新しい例の期待される結果は、質問で与えられた例と矛盾しています。
24 時間時計の周期的な性質のため、2 つの通常の時間について、2 つの通常の時間の間で計算できる正の距離が 2 つあります。 Time1 から Time2 に逆戻りします。計算の 1 つは終点 (00:00 または 24:00) の周りの距離を概念的に「ラップ」する必要があり、もう 1 つの計算はラップを必要としません。どのエンドポイントが交差するか、どの計算がそれを超えるかは、2 つの時間の絶対順序によって異なります。Time1>Time2 の場合、前方計算は 24:00 付近でラップされますが、後方計算はラップされません。一方、Time1<Time2 の場合、前方計算はラップされませんが、後方計算は 00:00 付近でラップされます。
(1) 等しい時間と (2) 12 時間の距離という特殊なケースを除いて、すべての (Time1,Time2) ペアは、順方向の計算と比較して、逆方向の計算で異なる距離を生成します。
質問で示した例に基づいて、2 種類の計算から得られる 2 つの可能な距離のうち、小さい方の距離を選択する必要があるように見えました。この例では、前方距離は 60,1,1439,1380 であり、後方距離は 1380,1439,1,60 です。結果として 60,1,1,60 が必要だったので、2 つの可能な距離のうち小さい方が必要だったように見えます。
これが、IaroslavDomin が を使用pmin()
してより短い距離を取得するソリューションを提供した理由です。私ifelse()
は同じロジックを達成していました。
Time1=18:00 と Time2=07:00 の新しい例では、前方距離は 780 (13 時間)、後方距離は 660 (11 時間) です。私と IaroslavDomin が書いたのと同じコードを使用すると、2 つの可能な距離のうち小さい方を選択するという意図を考えると、660 という結果が得られます。
別の要件を念頭に置いている場合は、別の要件を指定して新しい質問をする必要があります。しかし、2 つの可能な距離のうち小さい方を選択するという解釈を考えると、私のコードと IaroslavDomin のコードの両方が正しいです。