繁体   English   中英

如何在 R 中找到两次之间的中间时间,有时是一夜之间,有时是同一天,但我没有日期?

[英]How do I find the mid time between two times in R, sometimes overnight, sometimes same day, but I have no date?

我想在我的 6000 名参与者的数据框中找到 SLQ300(睡眠时间)和 SLQ310(唤醒时间)列中两次之间的中间时间。 补充:我已经在 SLD012 列中有持续时间。 因此,如果我们可以将一半的持续时间添加到睡眠时间,那就太好了。

例如。 在第一行中,它应该是 23:00 和 07:00 之间的中点,即 03:00。

而在第 9 行,应该是在 01:00 到 06:00 之间,也就是 03:30。

先感谢您!

数据框

尝试这个:

time2num <- function(x) {
  vapply(strsplit(x, ':'), function(y) sum(as.numeric(y) * c(60, 1)),
         numeric(1), USE.NAMES=FALSE)
}

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

# the code
dat[,c("tm1n","tm2n")] <- lapply(dat[,c("tm1","tm2")], time2num)
dat
#   id   tm1   tm2 tm1n tm2n
# 1  1 23:00 07:00 1380  420
# 2  2 01:00 06:00   60  360
with(dat, ifelse(tm1n > tm2n, 24*60, 0) + tm2n - tm1n)
# [1] 480 300   ### minutes

或者您可以使用模数:

with(dat, tm2n - tm1n) %% (12*60)

(虽然我还没有在各种组合中测试过它)。

和中间时间:

format(as.POSIXct(paste(Sys.Date(), dat$tm1)) +
         60*with(dat, ifelse(tm1n > tm2n, 24*60, 0) + tm2n - tm1n)/2,
       format="%H:%M")
# [1] "03:00" "03:30"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM