0

"%H:%M" 形式の時間で構成される次の 2 つの文字ベクトルがあるとします。

Time1 <- c("23:00","23:59","00:01", "01:00")

Time2 <- c("00:00"," 00:00","00:00", "00:00") 

結果が次のようになるように、時間間の絶対距離を計算するにはどうすればよいですか。

[1] 60  1  1 60 

時間の各ペアの間の分数を表す値で?

psychパッケージのドキュメントを読み、 lubridateのドキュメントを検索しましたが、解決策を特定していません。

時間ベクトルに固定の日付を割り当てようとしました

fixedDATE <- "2012-05-19"
T1 <- as.POSIXct(paste(fixedDATE, Time1 ))
T2 <- as.POSIXct(paste(fixedDATE, Time1 ))
T1 - T2
Time differences in mins
[1] 1380 1439    1   60

この一見単純なジレンマを解決するための助けに感謝します。

4

2 に答える 2

0

ルブリデートの使用方法は次のとおりです。

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 のコードの両方が正しいです。

于 2016-05-14T12:56:08.517 に答える