在没有日期的两天内计算 hh:mm 变量的中点
Calculate midpoint for hh:mm variable over the span of two days with no date
我想计算入睡和醒来之间的中间点。我有点挣扎,因为我没有日期,只有 hh:mm 的时间。
例如,如果您在 2 a.m 上床睡觉。在 10 a.m. 醒来,中点是 6a.m.
下面是一个示例,我很乐意为您提供帮助!
DF <- data.frame(time_start = c("23:45", "21:30", "22:00", "23:00", "00:30", "02:00"),
time_end = c("06:49", "06:30", "07:00", "09:00", "5:30", "10:00"))
将两个时间对象转换为数值,计算它们的平均值,然后将它们转换回时间对象。
library(dplyr)
library(lubridate)
DF %>%
mutate_all(hm) %>%
mutate(time_end = time_end + (time_end < time_start) * days(1),
midpoint = seconds_to_period(as.numeric(time_start + time_end) / 2)) %>%
mutate_all(~sprintf("%02d:%02d", hour(.), minute(.)))
# time_start time_end midpoint
# 1 23:45 06:49 03:17
# 2 21:30 06:30 02:00
# 3 22:00 07:00 02:30
# 4 23:00 09:00 04:00
# 5 00:30 05:30 03:00
# 6 02:00 10:00 06:00
我想计算入睡和醒来之间的中间点。我有点挣扎,因为我没有日期,只有 hh:mm 的时间。
例如,如果您在 2 a.m 上床睡觉。在 10 a.m. 醒来,中点是 6a.m.
下面是一个示例,我很乐意为您提供帮助!
DF <- data.frame(time_start = c("23:45", "21:30", "22:00", "23:00", "00:30", "02:00"),
time_end = c("06:49", "06:30", "07:00", "09:00", "5:30", "10:00"))
将两个时间对象转换为数值,计算它们的平均值,然后将它们转换回时间对象。
library(dplyr)
library(lubridate)
DF %>%
mutate_all(hm) %>%
mutate(time_end = time_end + (time_end < time_start) * days(1),
midpoint = seconds_to_period(as.numeric(time_start + time_end) / 2)) %>%
mutate_all(~sprintf("%02d:%02d", hour(.), minute(.)))
# time_start time_end midpoint
# 1 23:45 06:49 03:17
# 2 21:30 06:30 02:00
# 3 22:00 07:00 02:30
# 4 23:00 09:00 04:00
# 5 00:30 05:30 03:00
# 6 02:00 10:00 06:00