【问题标题】:Find mid time between two times in R, sometimes overnight在 R 中找到两次之间的中间时间,有时是一夜之间
【发布时间】:2021-05-16 21:22:54
【问题描述】:

我想在 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。

【问题讨论】:

标签: r


【解决方案1】:

你可以只添加一半的持续时间

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

【讨论】:

    【解决方案2】:

    这是一种方法-

    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 类。这将在两列中添加今天的日期。
    • 现在如果tm1 &gt; tm2(如在第 1 行中)将 1 天添加到 tm2
    • 两次相减,除以2,差值与tm1相加,得到midtime
    • 最后将所有列中的时间改为'%H:%M'格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      相关资源
      最近更新 更多