r语言 - 计算时间到或从一天的固定小时



我在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)

相关内容

  • 没有找到相关文章

最新更新