簡體   English   中英

在 R 中查找兩次之間的中間時間,有時是一夜之間

[英]Find mid time between two times in R, sometimes overnight

我想在 R 中找到時間 1 和時間 2 之間的中間時間 我已經有了以小時為單位的持續時間。 有時是一夜之間(第 1 行),有時不是(第 2 行)。

這是數據框中的前兩行

dat <- data.frame(id=1:2, tm1=c("23:00","01:00"), tm2=c("07:00","06:00"), dur=c("8.0","5.0"))

數據框圖片

所以在第 1 行,中間時間應該是 3:00,在第 2 行應該是 03:30。

你可以只添加一半的持續時間

format(strptime(dat$tm1,format = '%H:%M') + dat$dur*3600/2, format = '%H:%M')

這是一種方法 -

library(dplyr)

dat %>%
  mutate(across(starts_with('tm'), as.POSIXct, tz = 'UTC', format = '%H:%M'), 
         tm2 = if_else(tm1 > tm2, tm2 + 86400, tm2), 
         midtime = tm1 + difftime(tm2, tm1, units = 'secs')/2, 
         across(c(starts_with('tm'), midtime), format, '%H:%M'))

#  id   tm1   tm2 dur midtime
#1  1 23:00 07:00 8.0   03:00
#2  2 01:00 06:00 5.0   03:30

邏輯是——

  • tm1tm2轉換為POSIXct class。 這將在兩列中添加今天的日期。
  • 現在,如果tm1 > tm2 (如在第 1 行中)將 1 天添加到tm2
  • 減去兩次,除以 2 並將差值添加到tm1以獲得midtime
  • 最后在所有列中以'%H:%M'格式更改時間。

暫無
暫無

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

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