簡體   English   中英

計算往返於一天中固定時間的時間

[英]Calculate time to or from a fixed hour of the day

我在R中有一堆時間戳記:

set.seed(42)  
t <- sample(1368104620:1399593658, 1000)
t <- as.POSIXlt(t, origin="1970-01-01")

我想知道每個時間戳距一天中的固定時間有多遠(例如,時間戳距凌晨5點有多遠?[今天,昨天或明天凌晨5點])。 最大距離應為12。

h <- t$hour + t$min/60 + t$sec/3600
h_fixed <- 5

一種執行此方法的方法是將當前小時與fixed_hour,昨天的fixed_hour和今天的fixed_hour進行比較。

d1 <- pmin(abs(h-h_fixed),abs(h-h_fixed+24),abs(h-h_fixed-24))
plot(h, d1)

另一種稍微更高級的方法如下:

d2 <- pmin((h_fixed-h) %% 24, (h-h_fixed) %% 24)
plot(h, d2)
all.equal(d1, d2)

他們的方法更優雅嗎? 我覺得我應該不用pmin就可以解決這個問題,但是答案一直困擾着我。

另一個解決方案使用最大距離為12的事實:

d3 <- ifelse(abs(h-h_fixed)<12, abs(h-h_fixed), 24-(abs(h-h_fixed)))
all.equal(d1, d3)

因此,如果時間在今天的fixed_hour 12小時以內,那就是我們的答案。 如果不是,那就是我們想要的答案的“補充”。 由於我們只對距離感興趣,所以時間是否接近昨天或明天並不重要。 不知道這是否更優雅,但是可以在不使用pmin()情況下解決問題。

尚不清楚這是好是壞,但是這個公式似乎有效並且很簡潔:

dif <- abs(h - h_fixed)
12 - abs(dif - 12)

也可以寫成一行:

12 - abs(abs(h - h_fixed) - 12)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM