1

我想计算入睡和醒来之间的中间点。我有点挣扎,因为我没有日期,只有 hh:mm 的时间。

例如,如果你凌晨 2 点睡觉,早上 10 点起床,那么中点是早上 6 点

下面是一个例子,我很高兴得到一些帮助!

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"))
4

1 回答 1

3

将两个时间对象转换为数值,计算它们的平均值,然后将它们转换回时间对象。

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
于 2020-05-08T12:14:11.150 回答