计算一天中固定小时的时间

时间:2014-05-08 17:03:56

标签: r datetime time

我在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的情况下解决这个问题,但答案就是我。

2 个答案:

答案 0 :(得分:2)

另一种解决方案使用最大距离为12:

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

因此,如果时间在今天固定时间的12小时内,那就是我们的答案。如果不是,那么它就是补充&#39;我们想要的答案。由于我们只对距离感兴趣,如果时间接近昨天或明天,那真的不重要。不确定这是否更优雅,但它确实解决了问题而不使用pmin()

答案 1 :(得分:1)

不清楚这是好还是坏,但这个公式似乎有效并且简洁:

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

它也可以写成一行:

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